此
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中。
这是预期的行为吗?有没有办法我可以设置它,以便我保证在任何地方得到相同的结果?
答案 0 :(得分:6)
std::mt19937
和兄弟姐妹是非常具体的算法。该标准要求例如对mt19937类型的默认构造对象的10000 th 连续调用将产生值4123659995 。这里没有摆动的空间。
std::normal_distribution
和兄弟姐妹只需要根据某个概率密度函数生成分布的结果。不要求它们具有任何特定功能。