在同一程序中调用srand()两次

noo*_*der 3 c++ random srand visual-c++

为什么当我在2个非常不同的点上调用srand()时它会导致数字不随机?一旦我删除其中一个它恢复正常.

Rei*_*ica 7

这取决于你如何称呼它.目的srand()是播种使用的伪随机数生成器rand().所以当你打电话时srand(i),它会初始化rand()为一个依赖的固定序列i.因此,当您使用相同的种子重新播种时,您将开始获得相同的序列.

最常见的用例是将生成器播种一次,并使用合适的"随机"值(例如惯用语time(NULL)).这种保证使您可能在不同的程序执行中获得不同的伪随机数序列.

但是,有时您可能希望使伪随机序列"可重放".想象一下,您正在测试随机数据上的几种排序算法.为了得到公平的比较,您应该在完全相同的数据上测试每个算法 - 因此在每次运行之前,您将使用相同的种子重新生成生成器.

换句话说:如果你想要数字只是伪随机,种子一次,并尽可能随机的值.如果您想要一些控制和可重复性,请根据需要播种.