首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用时间使用循环在C中对随机数生成器进行种子生成

使用时间使用循环在C中对随机数生成器进行种子生成
EN

Stack Overflow用户
提问于 2017-07-23 06:03:26
回答 2查看 263关注 0票数 1

我在C程序中使用srand((unsigned)time(NULL))作为随机数生成器的种子。我注意到,当我使用循环创建一个随机数组时,如果我将种子放在循环内而不是循环外,所有的数字都将是相同的。我假设这是因为循环运行得非常快,但是当随机发生器在循环之外时,种子如何工作来重新播种随机发生器?我对这在程序中是如何工作的感到困惑。

EN

回答 2

Stack Overflow用户

发布于 2017-07-23 06:05:27

你应该在你的程序中只srand一次。因为time(NULL)是以秒为单位测量的,所以在循环中,您实际上是一遍又一遍地播种相同的值。每个种子将产生一个确定的伪随机数流,但将同一种子设置两次会产生两次相同的序列。

关于srandhttp://www.cplusplus.com/reference/cstdlib/srand/

关于timehttps://www.tutorialspoint.com/c_standard_library/c_function_time.htm

为什么一次:srand() — why call it only once?

票数 4
EN

Stack Overflow用户

发布于 2017-07-23 06:06:19

使用srand((unsigned)time(NULL))作为随机数生成器的种子是不可靠的,因为time()返回自1970年1月1日以来的秒数。此值每秒仅更改一次。如果你在同一秒内对生成器重新播种,你确实会再次得到相同的随机序列。

您应该使用更改更快的源:

代码语言:javascript
复制
srand((unsigned)clock());

此外,不建议对生成器重新设定种子。伪随机数生成器是用来产生具有某些属性的随机序列的。重新播种发电机打破了这一承诺。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45259631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档