我在C程序中使用srand((unsigned)time(NULL))作为随机数生成器的种子。我注意到,当我使用循环创建一个随机数组时,如果我将种子放在循环内而不是循环外,所有的数字都将是相同的。我假设这是因为循环运行得非常快,但是当随机发生器在循环之外时,种子如何工作来重新播种随机发生器?我对这在程序中是如何工作的感到困惑。
发布于 2017-07-23 06:05:27
你应该在你的程序中只srand一次。因为time(NULL)是以秒为单位测量的,所以在循环中,您实际上是一遍又一遍地播种相同的值。每个种子将产生一个确定的伪随机数流,但将同一种子设置两次会产生两次相同的序列。
关于srand:http://www.cplusplus.com/reference/cstdlib/srand/
关于time:https://www.tutorialspoint.com/c_standard_library/c_function_time.htm
发布于 2017-07-23 06:06:19
使用srand((unsigned)time(NULL))作为随机数生成器的种子是不可靠的,因为time()返回自1970年1月1日以来的秒数。此值每秒仅更改一次。如果你在同一秒内对生成器重新播种,你确实会再次得到相同的随机序列。
您应该使用更改更快的源:
srand((unsigned)clock());此外,不建议对生成器重新设定种子。伪随机数生成器是用来产生具有某些属性的随机序列的。重新播种发电机打破了这一承诺。
https://stackoverflow.com/questions/45259631
复制相似问题