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

Ale*_*int 6 random c++11

这个

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

0.339167在我的OSX 10.9机器上打印(用clang 3.5构建),但-0.113922在linux盒子上打印(gcc 4.8).我期待到处都能看到相同的结果.

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

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

n. *_* m. 6

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

std::normal_distribution相反,兄弟姐妹只需要根据一定的概率密度函数产生分布的结果.它们不需要具有任何特定功能.