如何保存C++ 0X随机数生成器的状态

use*_*066 5 random c++11

我与新的C++ 0x随机库中玩耍,并在此基础上的问题:
什么是获得的C++ 0x随机数生成器的状态的标准呢?
似乎如果你不知道随机生成器当前状态的种子,保存其状态的唯一方法是将生成器存储在流中.为此,我写了以下内容

#include <iostream>
#include <sstream>
#include <random>

int main(int /*argc*/, char** /*argv*/)
{
  std::mt19937 engine1;
  unsigned int var = engine1(); // Just to get engine1 out of its initial state
  std::stringstream input;
  input << engine1;
  std::mt19937 engine2;
  input >> engine2;
  std::cout<<"Engine comparison: "<<(engine1 == engine2)<<std::endl;
  std::cout<<"Engine 1 random number "<<engine1()<<std::endl;
  std::cout<<"Engine 2 random number "<<engine2()<<std::endl;
}
Run Code Online (Sandbox Code Playgroud)

这输出

发动机比较:1
发动机1随机数581869302
发动机2随机数4178893912

我有几个问题:

  • 为什么engine1和engine2的下一个数字不同?
  • 为什么两个引擎比较相同,即使它们的下一个数字不同?
  • 在我的示例中我做错了什么以及保存随机引擎状态以便在以后的运行中获得可重复性的正确方法(假设您不知道种子设置所需的状态)?

谢谢.

How*_*ant 3

这对我来说看起来像是一个错误。我在libc++上运行了你的代码,输出是:

Engine comparison: 1
Engine 1 random number 581869302
Engine 2 random number 581869302
Run Code Online (Sandbox Code Playgroud)