Мне нужен генератор случайных чисел C++ 11, который является «достаточно хорошим», и который я могу сохранить и восстановить состояние. Я хочу, чтобы сохраненное состояние было значительно меньше, чем 6,6kb или около того, что этот код производитКак выбрать параметры для стандартного std :: mersenne_twister_engine?
std::mt19937 rng (1);
std::ofstream save ("save.txt");
save << rng;
std::mersenne_twister_engine имеет большое количество параметров. Это немного страшно.
Для моих целей достаточно периода порядка миллиардов. Я слышал о TinyMT, который может быть уместным, но не может понять, как реализовать его как специализированную специализацию.
Как выбрать параметры? Я подозреваю, что это сильно сломается, если я просто уменьшу параметр «размер штата» до нескольких слов.
Я хотел бы использовать другой двигатель целиком, но, кроме терпимого умеренного периода, я не хочу жертвовать качеством статистической случайности. Артефакты, такие как приведенные ниже (для линейных конгруэнтов), неприемлемы.
Возможно, было бы проще написать обертку вокруг TinyMT. –
Рассмотрите [this] (http://www.boost.org/doc/libs/1_57_0/doc/html/boost_random/reference.html#boost_random.reference.generators) таблицу, если вы в порядке с другим движком. Также обратите внимание, что ваш код сохраняет состояние движка в текстовом режиме, а не двоичном. Бинарный размер составляет всего ~ 2.5kb. – sbabbi
Возможно, T.C., но я хочу на самом деле понять проблемы. И sbabbi, 2.5kb все еще слишком много, на порядок. – spraff