【发布时间】:2013-11-01 19:53:45
【问题描述】:
我目前正在运行一个具有 8 个以上管道(线程)的多线程模拟应用程序。这些管道运行非常复杂的代码,该代码依赖于种子生成的随机序列。然后将序列归结为单个 0/1。
在将种子从主线程传递到处理管道后,我希望这种“随机处理”是 100% 确定性的。所以,我可以在第二次运行中复制结果。
所以,例如:(我有这个编码并且它工作)
Pipe 1 -> Seed: 123 -> Result: 0
Pipe 2 -> Seed: 123 -> Result: 0
Pipe 3 -> Seed: 589 -> Result: 1
当我需要运行 100M 或更多这些进程然后平均结果时,就会出现问题。可能100M中只有1个为1,其余为0。
很明显,我无法对 100M 随机值进行采样,并将 32 位种子提供给srand()。
是否可以在 VS2010 中使用 64 位种子播种到 srand(),或者使用等效的方法?
rand() 在 2^32 之后是否重复自身(具有某种内部隐藏状态)?
谢谢
【问题讨论】:
-
rand的周期为RAND_MAX,一般为 2^16-1,再多的种子也无法解决,最好使用更高质量的 PRNG。
标签: c++ c visual-studio-2010 64-bit srand