我正在尝试使用新的C++0X随机库,并基于以下问题进行:
什么是获取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;
}
这会输出:
引擎比较: 1
引擎1随机数581869302
引擎2随机数4178893912
我有几个问题:
- 为什么engine1和engine2的下一个数字不同?
- 为什么两个引擎比较相等,即使它们的下一个数字不同?
- 在我的例子中我做错了什么?正确的方法是什么来保存一个随机引擎的状态以便在后续运行中获取可重复性(假设您不知道种子来设置所需的状态)?
谢谢。