C++ 如何获得C++;Mersenne Twister 19937生成器在Windows和Linux上提供相同的结果?

C++ 如何获得C++;Mersenne Twister 19937生成器在Windows和Linux上提供相同的结果?,c++,linux,random,C++,Linux,Random,我们有下面的代码来生成正态分布的随机数 double average = 10.0; double spread = 4.0; std::mt19937 generator; generator.seed(1); std::normal_distribution<double> distribution(average, spread); for (uint i = 0; i < 10; i++) cout << "ran

我们有下面的代码来生成正态分布的随机数

   double average = 10.0; double spread = 4.0;
   std::mt19937 generator;
   generator.seed(1);
   std::normal_distribution<double> distribution(average, spread);

   for (uint i = 0; i < 10; i++)
      cout << "randomNumber=" << distribution(generator) << endl;
Linux输出:

randomNumber=7.80102
randomNumber=4.38851
randomNumber=16.331
randomNumber=5.81941
randomNumber=11.0304
randomNumber=2.16242
randomNumber=3.96877
randomNumber=8.73883
randomNumber=13.4327
randomNumber=10.2854

C++库规范保证生成器将产生相同的值序列,但不需要分配。

如果修改代码以从mt19937生成器生成原始输出,您会发现跨平台的结果是相同的:

std::mt19937 generator(1);

for (uint i = 0; i < 10; i++)
  cout << "randomNumber=" << generator() << endl;
std::mt19937发电机(1);
对于(uint i=0;i<10;i++)

我猜问题出在配电系统,而不是发电机。尝试直接从
generator()
打印值。我的猜测是序列是相同的,但是libstdc++和MSVC++实现的
std::normal_distribution
不同,因此使用它时结果不同。
std::mt19937 generator(1);

for (uint i = 0; i < 10; i++)
  cout << "randomNumber=" << generator() << endl;