Closed. This question does not meet Stack Overflow guidelines 。它目前不接受答案。
想改善这个问题吗?更新问题,使其成为 Stack Overflow 的 on-topic。
7年前关闭。
Improve this question
为什么当我在两个非常不同的点调用 srand() 时会导致数字不是随机的?一旦我删除其中之一,它就会恢复正常。
想改善这个问题吗?更新问题,使其成为 Stack Overflow 的 on-topic。
7年前关闭。
Improve this question
为什么当我在两个非常不同的点调用 srand() 时会导致数字不是随机的?一旦我删除其中之一,它就会恢复正常。
最佳答案
这取决于你如何称呼它。 srand()
的目的是为 rand()
使用的伪随机数生成器提供种子。因此,当您调用 srand(i)
时,它会将 rand()
初始化为取决于 i
的固定序列。所以当你用相同的种子重新播种时,你开始得到相同的序列。
最常见的用例是只为生成器设置一次种子,并使用合适的“随机”值(例如惯用的 time(NULL)
)。这保证了您可能会在不同的程序执行中获得不同的伪随机数序列。
但是,有时您可能希望使伪随机序列“可重播”。想象一下,您正在对随机数据测试几种排序算法。为了获得公平的比较,您应该在完全相同的数据上测试每个算法 - 因此您将在每次运行之前使用相同的种子重新播种生成器。
换句话说:如果你想要数字只是伪随机,种子一次,并且值尽可能随机。如果您想要一些控制和可重玩性,请根据需要进行播种。
关于c++ - 在同一个程序中调用 srand() 两次,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21726414/
10-12 05:51