当前位置:  开发笔记 > 编程语言 > 正文

Windows和Linux上的不同rand()结果

如何解决《Windows和Linux上的不同rand()结果》经验,为你挑选了3个好方法。

我注意到,标准的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



1> Marcelo Cant..:

Boost具有广泛的RNG,可能具有跨平台的可重现行为.



2> Oliver Charl..:

自己写(不推荐).

使用图书馆.例如Boost

这个功能


不推荐使用,因为实现的正确性难以测试,并且任何错误都不会立即显现,但可能会在应用程序执行期间导致问题.还有,为什么重新发明轮子?

3> Konrad Rudol..:

如果您对标准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读取实现.

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有