首页 / C语言 / C语言之实现随机数产生算法
C语言之实现随机数产生算法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C语言之实现随机数产生算法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1397字,纯文字阅读大概需要2分钟。
内容图文
随机数,也就是在不同的时刻产生不同的数值。在UNIX操作系统和window的操作系统上,我们知道有一个函数rand,它就是用来产生随机数的函数API接口,那么它的原理如何实现?
如果约定a1=f(seed),an+1=f(an),那么可以得到一个序列a1,a2,a3..an,那么要制作一个伪随机函数rand,只需要让它每调用一次就返回序列的下一个元素就行。其实就是相当于第1次调用rand返回a1,第2次返回a2,…,第n次返回an,这样每次返回的数值都不一样,也就是相当于随机数了。但是其实不是真正的随机数,真正的随机数是使用物理现象产生的:比如掷钱币、骰子、转轮、使用电子元件的噪音、核裂变等等。这样的随机数发生器叫做物理性随机数发生器,它们的缺点是技术要求比较高。
在当前的计算机领域,许许多多的随机数算法正是基于这样的原理产生,一般情况下我们在平时使用rand函数的时候,需要种钟子,也就是种随机数种子,确保每一次产生的数值不一样。这时候我们需要一个srand()的函数,然后在一定的时间里time()函数产生不同的序列。
一般在写的时候是这样:srand(time(NULL)) ;这样就相当于种种子。接下来我们来看一下具体的代码:
#include <stdio.h> #include <time.h> static unsigned int randseed; /* 实现伪随机数的支持 */ unsigned int Curl_rand(void) { unsigned int r; /* 返回一个无符号32位整型的伪随机数. */ r = randseed = randseed * 1103515245 + 12345; return (r << 16) | ((r >> 16) & 0xFFFF); } void Curl_srand(void) { /* 产生随机的伪随机数序列。 */ randseed = (unsigned int) time(NULL); Curl_rand(); Curl_rand(); Curl_rand(); } int main(void) { srand(); unsigned int i ; int j = 10; printf("产生10个随机数:\n"); while(j != 0){ i = Curl_rand() % 100 ; printf("i:%d\n",i); j-- ; } return 0 ; }执行结果:
如果不用这样的算法,我们调用系统实现的接口是这样:
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { //种种子 srand(time(NULL)); int i ; int j ; for(i = 0 ; i < 10 ; i ++) { //产生10个100以内的随机数 j = rand()%100 ; printf("j:%d\n",j); } return 0 ; }运行结果:
原文:http://blog.csdn.net/morixinguan/article/details/50704925
内容总结
以上是互联网集市为您收集整理的C语言之实现随机数产生算法全部内容,希望文章能够帮你解决C语言之实现随机数产生算法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。