Почему mersenne_twister_engine гарантирует определенные результаты? - PullRequest
0 голосов
/ 26 февраля 2019

Я отмечаю следующее в статье cppreference для std::mersenne_twister_engine (например, std::mt19937):

Требуется 10000-й последовательный вызов по умолчанию std::mt19937для получения значения 4123659995.

10000-й последовательный вызов построенного по умолчанию std::mt19937_64 требуется для получения значения 9981545732273789042.

Предполагая, что эта интерпретациястандарт точен, в чем же дело?Почему существуют эти гарантии?Разве это не неслучайно ?

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Все технически полезные генераторы случайных чисел являются псевдо -лучайными генераторами ( wikipedia ) по своей конструкции.Это означает, что они имеют семя и производят 100% идентичные последовательности на основе данного семени.Это критическое требование для применения в симуляциях Монте-Карло и т. Д., Где вы можете столкнуться с редкими проблемами или ошибками, и без этой функции было бы невозможно разработать любую стабильную сложную последовательность симуляции Монте-Карло.

Таким образом, случайные числа НЕ производят случайных чисел.Они производят последовательности чисел, которые имеют нулевую корреляцию на любом или очень большом расстоянии.

В вашем примере инициализация по умолчанию просто соответствует одному конкретному из таких последовательностей.

0 голосов
/ 26 февраля 2019

Из предложения N1398 :

Как пользователь может быть уверен, что реализация механизма случайных чисел выполняется точно так, как указано, правильно с учетом любой платформыособенности [sic] (например, нечетные размеры)?В конце концов, незначительные опечатки в реализации могут быть не очевидны;производимые числа могут выглядеть «случайными».Поэтому в этом предложении для каждого механизма указывается 10000-е число в последовательности случайных чисел, создаваемой объектом механизма по умолчанию.

Таким образом, это всего лишь относительно произвольная «путевая точка», выбранная в качестве способа обеспечения соответствияреализации семантики этого PRNG.

Это не семантическое ограничение per se;это проверка того, что реализация соблюдает требования.

ИМО примечание в стандартном тексте может быть в порядке, поскольку это беспрецедентный способ перепроверить качество реализации.(Мне неизвестно о какой-либо другой функции, чей QoI реализации может быть проверен примерами данных, приведенными в самом стандартном тексте.)

Причитается Blastfurnace для впервые пришедший к этому понятию .

...