为什么 std::uniform_int_distribution 在不同系统中没有给出相同的答案?

san*_*yre 1 c++ random c++11

代码示例:

#include <iostream>
#include <random>
using namespace std;

int main()
{
    mt19937 generator(0);
    uniform_int_distribution<int> distr(0, 100);

    for(auto i = 0; i < 10; ++i)
    {
         cout << distr(generator) << "\n";
    }
}
Run Code Online (Sandbox Code Playgroud)

此代码在 Mac 和 Windows 上生成不同的数字,但替换uniform_int_distributionuniform_real_distribution修复该问题,并且生成的序列在两个平台上是相同的。

为什么会发生这种情况?

Ker*_* SB 5

分布的算法没有指定,不同的实现可能会产生不同的结果。

(标准唯一指定的是原始随机位引擎;那些产生可预测的结果。)