这个
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中.
这是预期的行为吗?有没有办法我可以设置它,以便我保证在任何地方得到相同的结果?
std::mt19937和兄弟姐妹是非常具体的算法.该标准要求例如,对mt19937类型的默认构造对象的第10000 次连续调用应产生值4123659995.这里没有摆动的空间.
std::normal_distribution相反,兄弟姐妹只需要根据一定的概率密度函数产生分布的结果.它们不需要具有任何特定功能.
| 归档时间: |
|
| 查看次数: |
146 次 |
| 最近记录: |