Каков стандартный способ получить состояние генератора случайных чисел C ++ 0x? - PullRequest
6 голосов
/ 28 февраля 2011

Я пытаюсь изучить новый подход C ++ 0x к генераторам случайных чисел (26.5) и внедрить в C ++ 0x-совместимый механизм случайных чисел (26.5.1.4).

Стандарт подробно описывает необходимый интерфейс для начальных последовательностей и то, как они могут быть переданы конструктору или seed функциям двигателей.

Однако я не могу найти какой-либо стандартный интерфейс для создания или генерации начальной последовательности из движка, тем самым получая его внутреннее состояние. Есть один? Или состояния могут быть скопированы только между механизмами через конструкцию / назначение копирования или копирование начальной последовательности начальных чисел?

Если это невозможно, кто-нибудь знает, в чем состоит обоснование (если таковое имеется) отсутствия такого интерфейса?

Ответы [ 3 ]

7 голосов
/ 28 февраля 2011

Нет API для генерации начального числа или последовательности начальных значений из состояния двигателя.Однако состояние двигателя может быть передано в поток istream и извлечено из ostream.А состояние двигателя равно EqualityComparable с состоянием другого двигателя (для двигателей того же типа).

Можно проверить поток ist, сгенерированный потоком двигателя к нему.Однако формат этого istream не указан.

0 голосов
/ 28 февраля 2011

Внутреннее состояние не должно выглядеть как начальная последовательность.Я думаю, что это близко к запросу компилятора для исходного кода из двоичного файла.Невозможно.

Вы можете скопировать весь движок и сделать копию еще раз.Или вы можете передать состояние в файл и перезагрузить его снова.

0 голосов
/ 28 февраля 2011

Это тоже мое понимание.(Чтобы быть ясным: я думаю, что состояния могут быть скопированы между движками только через конструкцию / назначение копирования или конструирование с той же начальной последовательностью начальных чисел и сгенерировав одинаковое количество псевдослучайных чисел.)

...