如何消除所有随机源,以便程序始终给出相同的答案?

Fra*_*ank 2 c++ random srand

我的C++代码严重依赖于采样(使用rand()),但我希望它是可重现的.所以在开始时,我用随机种子初始化srand()并打印出种子.我希望其他人能够再次运行相同的代码,但用相同的种子初始化srand()并获得与我完全相同的答案.

但在什么情况下有保证?我想只有在同一系统上使用相同的编译器编译二进制文件时才有效?可能使得答案与我最初的答案不同的其他因素有哪些?

小智 8

解决方案是在所有情况下使用相同的代码 - Boost随机数库比任何C++标准库实现都要好得多,并且您可以在所有平台上使用相同的代码.看看这个问题,例如它的使用和图书馆文档的链接.

  • 我补充一点,只有每次以相同的方式记录数字时它才是正确的.与评论中提到的另一个一样:如果您为多个线程使用相同的数字生成器,例如,结果可能无法重现. (2认同)