首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

c语言中产生批量随机数时为什么要srand放在循环之外?

如题,这个问题想必是大多数c语言新手都比较困惑的问题。

我们要产生一些随机数,c语言中一般标准做法是这样:

#include

#include

#include

int main ()

{

srand((unsigned)time(NULL));

for(int i=0;i

{

     printf("%d\n",rand());

}

return 0;

}

其实这里有个概念经常会被官方一些的词给影响到,这里的正解其实是

Srand是播种的,只需要执行一次,那么接下来以我的理解来看待此事。

Srand执行后类似一个异步任务被提交了,而这个异步任务在后台运行,不断的产生随机数。

然后在循环中通过rand来获取产生的随机数。

那么试想一下,如果在循环体中将这个srand语句进行循环,由于循环比较快,基本上都在1秒内一个语句就能结束,所以此时srand播种每次都来不及,播种就一直不停的被初始化。

那么每次rand获取的值肯定也就是固定的了。

这里与srand中所传入的实参无关,有人说是传入一个time是因为time会随着系统不断的变更,所以就会不停产生不同的随机数。其实我认为不然,srand产生的随机数不是真正的随机数,这个观点是我所认可的观点,在超大循环超大数量级别的时候会碰到重复的。

所以如果这里播种的参数不用时间戳也是可以的,如下面这个程序,我直接把播种的参数为1.

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20210930A0GWGK00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券