我有一个C ++应用程序,它在各个地方调用rand()。我是否需要定期初始化srand()
以确保rand()是合理随机的,或者是否足以在应用启动时调用它一次?
答案 0 :(得分:16)
如果您只有一个线程,请将种子一次。如果经常重新设置,实际上可能会破坏随机数的某些统计属性。如果您有多个线程,请不要使用rand
,而是使用像drand48_r
这样的线程安全,它允许您维护每线程状态(这样您就可以为每个线程播种一次)。
答案 1 :(得分:4)
在申请开始时只有一次。
答案 2 :(得分:4)
不只是打电话一次就好了。 使用种子值使每次执行的随机序列相同。当你重放它以进行调试时,这可能有助于(例如)游戏的行为确定性。
答案 3 :(得分:3)
在应用启动时调用一次