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

Random 如何保存C+的状态+;0X随机数发生器,random,c++11,Random,C++11,我正在使用新的C++0X随机库,基于这个问题: 如果您不知道随机生成器当前状态的种子,保存其状态的唯一方法是将生成器存储在流中。为此,我写了以下内容 #include <iostream> #include <sstream> #include <random> int main(int /*argc*/, char** /*argv*/) { std::mt19937 engine1; unsigned int var = engine1();

我正在使用新的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;
}
#包括
#包括
#包括
int main(int/*argc*/,char**/*argv*/)
{
标准:mt19937发动机1;
unsigned int var=engine1();//只是为了让engine1脱离其初始状态
std::stringstream输入;
输入>引擎2;

std::cout对我来说这看起来像个bug。我在上运行了您的代码,输出为:

Engine comparison: 1
Engine 1 random number 581869302
Engine 2 random number 581869302

请注意,创建了一个长度为624的数组来存储PRNG的状态;这就是其周期为2^19937的原因之一− 1而不是2^32或更短,如果它在每个输出中暴露了整个状态。我在gcc 4.6中得到了相同的结果,但在gcc 4.7中它是固定的。当然,我应该指出,此实现通常输出581869302():-)谢谢链接:)。考虑到重复性要求,我可能会切换到troll随机数生成器。