c ++ normal_distribution在不同平台上提供不同的结果

时间:2014-10-30 20:57:12

标签: c++11 random

std::mt19937 gen(123);
std::normal_distribution<> distr(0., .2);
printf("%f", distr(gen));

在我的OSX 10.9计算机上打印0.339167(使用clang 3.5构建),但在linux框(gcc 4.8)上打印-0.113922。我期待到处都能看到相同的结果。

在检查来自mt19937的基础流时,我在两个平台上都看到了一致的数字序列。因此,平台不一致似乎在std :: normal_distribution中。

这是预期的行为吗?有没有办法我可以设置它,以便我保证在任何地方得到相同的结果?

1 个答案:

答案 0 :(得分:6)

std::mt19937和兄弟姐妹是非常具体的算法。该标准要求例如对mt19937类型的默认构造对象的10000 th 连续调用将产生值4123659995 。这里没有摆动的空间。

相比之下,

std::normal_distribution和兄弟姐妹只需要根据某个概率密度函数生成分布的结果。不要求它们具有任何特定功能。