这个
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 次 |
最近记录: |