关于srand()和rand()产生随机数的一点问题
来源:互联网 发布:linux # $ 编辑:程序博客网 时间:2024/06/06 04:24
今天在写程序的时候,需要产生一系列的随机数,于是我写了与下面类似的代码:
for(int i = 0; i < 100; i++){ srand(time(NULL)); cout << rand()%1000 << endl; }
运行以后发现,产生的随机数都是相同的:
真是百思不得其解。幸好有google+baidu+sogou.
原来,在c/c++中采用srand()和rand()产生的随机数其实严格意义上来说应该叫做伪随机数。伪随机数并不是说这些数不是随机的,而是指这些数具有一定的规律。假如每次通过srand()种下的种子都是同样的,那每次产生的随机数列也应该是一样的。所以我们应该把种子设为一个变化的数,比如说流逝的时间,可以这样:srand(time(NULL))。如此一来,随着程序对种子进行赋值的时间的不同,种子time(NULL)自然也就不同了。不过,由于我是在一个for循环中对种子进行赋值的。而for循环每循环一次的时间是非常短的,远远低于一秒(注:time()返回的是秒数),也就是说for循环循环一次的时间不足以使time(NULL)发生改变。既然srand()的种子是相同的,那么rand()产生的随机数序列也就是相同的了。而每次我们输出的都是这些序列中的第一个数,所以肯定就是相同的了。验证程序:
int flag = 0; for(int i=0;;i++){ srand((unsigned int)time(NULL)); int j = rand()%1000; if(j != flag) { flag = j; cout<<i<<" "<<j<<endl; }
结果:
结果说明,for循环要循环10的7次方次,才会产生不同的随机数。这应该耗费的是1秒钟吧。
0 0
- 关于srand()和rand()产生随机数的一点问题
- 随机数的产生rand( ) 和srand( )
- rand 和 srand产生随机数
- rand 和 srand产生随机数
- srand()和rand()产生随机数
- rand srand产生随机数
- 用rand()和srand()产生为随机数的方法总结
- 用rand()和srand()产生为随机数的方法总结
- rand()和srand()产生伪随机数的方法总结
- 用rand()和srand()产生伪随机数的方法总结
- rand()和srand()产生伪随机数的方法
- rand()和srand()产生为随机数的方法
- 用rand()和srand()产生伪随机数的方法总结
- 用rand()和srand()产生伪随机数的方法总结
- 用rand()和srand()产生为随机数的方法总结
- 用rand()和srand()产生伪随机数的方法总结
- 用rand()和srand()产生为随机数的方法总结
- 用rand()和srand()产生为随机数的方法总结
- Python计算——二维数组的实现
- hdu1162(最小生成树prim)
- 【C++】PAT(basic level)1010. 一元多项式求导 (25)
- 第二周作业
- c实现哥德巴赫猜想
- 关于srand()和rand()产生随机数的一点问题
- 线性判别分析(Linear Discriminant Analysis, LDA)算法分析
- 二叉树的操作
- Java数据结构学习
- 复杂链表的复制
- [LeetCode] Single Number
- 写的不知道有木有问题
- 题目1449:确定比赛名次
- CGContextRef画图