我目前正在使用8个以上的管道(线程)运行多线程仿真应用程序。这些管道运行一个非常复杂的代码,这取决于种子生成的随机序列。该序列然后被煮成一个单一的0/1。64位随机发生器的种子
我希望这个“随机处理”在从主线程传递一个种子到处理管道后是100%确定性的。所以,我可以在第二轮复制结果。
所以,例如:(我有这个编码和它的作品)
Pipe 1 -> Seed: 123 -> Result: 0
Pipe 2 -> Seed: 123 -> Result: 0
Pipe 3 -> Seed: 589 -> Result: 1
,当我需要运行这些过程的100M或以上,然后平均结果,就会出现问题。可能是这种情况,100M中只有1个是1,其余为0. 显然,我不能用32bit种子向srand()
进行采样,因此无法采样100M随机值。
是否有可能在VS2010中使用64bit种子播种到srand()或使用等效方法?
rand()在2^32后重复自己还是没有(有一些内部隐藏状态)?
感谢
'rand'具有周期RAND_MAX'的'其通常是2^16-1,没有接种的量将解决这个问题,最好使用较高质量PRNG。 – Necrolis