Deterministic Random Number Streams in C++ STL
我想提供一个数字,然后接收一组随机数字。但是,我希望这些数字是相同的,不管我在哪台计算机上运行它(假设我提供相同的种子)。
基本上,我的问题是:在C++中,如果我使用EDCOX1,0个,但是用用户定义的种子而不是当前的时间提供EDCOX1×1,那么我能在任何计算机上产生相同的随机数流吗?
图书馆有几十个图书馆。选择一个。我喜欢用旋转木马。
通过使用外部提供的库,您可以绕过对您的语言库
mt是我的最爱,因为我是一个物理学家,我把这些东西用于蒙特卡洛,在那里保证高维的均匀分布是很重要的。但不要将mt用作密码prng!
根据您的需要,您可能需要考虑使用boost.random。它提供了几个高质量的随机数生成器。
假设
确保这一点的最简单方法是在程序中包含一个已知的rand()实现——或者包含在项目的源代码中,或者以您可以管理的库的形式。
不,ansi c标准只规定
你想要一个便携式的prng。Mersenne Twister(许多实现在底部链接)非常可移植,Ben Pfaff的国产C99兼容PRNG也是如此。Booost。随机也应该是好的;当你在C++中编写你的代码时,使用Boost并不限制你的平台选择(虽然一些"较小")(即不兼容)编译器可能会对其大量使用模板元编程产生麻烦。这对于小容量的嵌入式平台和新型的研究体系结构来说只是个问题,所以如果"任何一台计算机"的意思是"GCC所针对的任何x86/ppc/arm/sparc/alpha/etc.平台",那么上述任何一个都应该做得很好。
编写自己的伪随机数例程。互联网上记录了很多算法,它们有许多应用程序,其中rand不够好(例如perlin噪声)。
尝试以下链接作为初学者:
http://en.wikipedia.org/wiki/linear_同余_generator
http://en.wikipedia.org/wiki/pseudorandom_number_生成器
对。对于给定的种子(起始值),rand()返回的数字序列将始终相同。
我相信如果你提供相同种子的srand,你会得到相同的结果。这几乎就是用伪随机数生成器定义种子的过程。