我注意到,标准的rand()函数在Windows和Linux上给出了不同的结果.当然,我使用了相同的种子数(1234).以下是几个初步结果:
WIN:4068 213 12761 8758
LIN:479142414 465566339 961126155 1057886067
我的应用程序要求两个平台产生相同的输出.我有什么选择?是否有符合我要求的兰德()的良好替代品?
谢谢
PS.我在Windows7上使用了MSVC 2008,在CentOS 5.5上使用了gcc 4.1.2
Boost具有广泛的RNG,可能具有跨平台的可重现行为.
自己写(不推荐).
使用图书馆.例如Boost
这个功能
如果您对标准rand
实现感到满意并且只需要可重现性,那么您可以轻松编写自己的线性同余生成器(适应C接口,可能不是一个好的选择! - 而是使用类来代替):
namespace myown { static int state; void srand(int seed) { state = seed; } int rand() { int const a = 1103515245; int const c = 12345; state = a * state + c; return (state >> 16) & 0x7FFF; } }
这使用了维基百科文章中的常量(ANSI C:Watcom).
也就是说,我宁愿选择其他人提出的Boost读取实现.