Как проверить PRNG?

В последнее время я реализовал MersenneTwister для 64-битных integer (или же long). Есть ли руководство или примеры того, как протестировать PRNG, чтобы я мог знать, является ли моя реализация достаточно хорошим решением? Меня особенно интересует, как проверить, имеет ли моя реализация достаточно хорошее равномерное распределение.

Чем конкретнее это связано с MersenneTwister, тем лучше.

4 ответа

Решение

Вам не нужно тестировать алгоритм Мерсенна Твистера - это делали люди, которые действительно знают, что они делают, - вам нужно только проверить, правильно ли вы реализовали алгоритм.

Вы можете зайти на веб-сайт Mersenne Twister и получить результаты тестов. Если вы производите ту же последовательность выводов, что и они, вы, вероятно, правильно реализовали алгоритм.

Обратите внимание, что сайт MT имеет ссылку специально для 64-битных машин и различные тестовые результаты для 32- и 64-битных версий.

Стандартная батарея тестов для PRNG - Diehard Tests.

Самый простой подход (если это действительно универсальный MT) - это сравнить его с хорошо известной библиотекой MT с тем же начальным числом.

Aloha!

Как сказал кто-то другой - используйте известные тестовые векторы ответов для своих алгоритмов. Если вы соответствуете тестовым векторам, вы можете быть уверены, что ваш генератор работает.

Если вы действительно хотите проверить генератор. Используйте тесты DIEHARD ++, реализованные инструментом Dieharder:

http://www.phy.duke.edu/~rgb/General/dieharder.php

Другие вопросы по тегам