您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
c语言中产生批量随机数时为什么要srand放在循环之外?
发布时间:2021-04-14 21:26:23编辑:雪饮阅读()
如题,这个问题想必是大多数c语言新手都比较困惑的问题。
我们要产生一些随机数,c语言中一般标准做法是这样:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main ()
{
srand((unsigned)time(NULL));
for(int i=0;i<100;i++)
{
printf("%d\n",rand());
}
return 0;
}
其实这里有个概念经常会被官方一些的词给影响到,这里的正解其实是
Srand是播种的,只需要执行一次,那么接下来以我的理解来看待此事。
Srand执行后类似一个异步任务被提交了,而这个异步任务在后台运行,不断的产生随机数。
然后在循环中通过rand来获取产生的随机数。
那么试想一下,如果在循环体中将这个srand语句进行循环,由于循环比较快,基本上都在1秒内一个语句就能结束,所以此时srand播种每次都来不及,播种就一直不停的被初始化。
那么每次rand获取的值肯定也就是固定的了。
这里与srand中所传入的实参无关,有人说是传入一个time是因为time会随着系统不断的变更,所以就会不停产生不同的随机数。其实我认为不然,srand产生的随机数不是真正的随机数,这个观点是我所认可的观点,在超大循环超大数量级别的时候会碰到重复的。
所以如果这里播种的参数不用时间戳也是可以的,如下面这个程序,我直接把播种的参数为1.
关键字词:c,c语言,随机数,播种,循环之外
上一篇:c语言中实现用指针遍历数组
下一篇:c语言-位域、内存单元、内存布局