【问题标题】:c++ normal_distribution gives different results on different platformsc++ normal_distribution 在不同平台上给出不同的结果
【发布时间】:2014-10-30 20:57:11
【问题描述】:

这个

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

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

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

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

【问题讨论】:

  • 那是 libstdc++ (gcc) 吗? libc++ (clang)?
  • @Deduplicator 是的,没错

标签: c++11 random


【解决方案1】:

std::mt19937 和兄弟是非常具体的算法。该标准要求,例如第 10000 次连续调用 mt19937 类型的默认构造对象应产生值 4123659995。这里没有回旋的余地。

std::normal_distribution 和兄弟姐妹,相比之下,只需要产生根据某个概率密度函数分布的结果。不需要它们是任何特定的功能。

【讨论】:

    猜你喜欢
    • 2018-07-19
    • 2023-03-07
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多