Я играю с новой случайной библиотекой 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 отличаются?
- Почему два двигателя сравниваются равными, хотя их следующие числа различны?
- Что я делаю не так в моем примере и как правильно сохранить состояние случайного движка, чтобы получить повторяемость при последующих запусках (при условии, что вы не знаете начальное значение для установки желаемого состояния)?
Спасибо.