Как проверить PRNG?
В последнее время я реализовал MersenneTwister для 64-битных integer
(или же long
). Есть ли руководство или примеры того, как протестировать PRNG, чтобы я мог знать, является ли моя реализация достаточно хорошим решением? Меня особенно интересует, как проверить, имеет ли моя реализация достаточно хорошее равномерное распределение.
Чем конкретнее это связано с MersenneTwister, тем лучше.
4 ответа
Вам не нужно тестировать алгоритм Мерсенна Твистера - это делали люди, которые действительно знают, что они делают, - вам нужно только проверить, правильно ли вы реализовали алгоритм.
Вы можете зайти на веб-сайт Mersenne Twister и получить результаты тестов. Если вы производите ту же последовательность выводов, что и они, вы, вероятно, правильно реализовали алгоритм.
Обратите внимание, что сайт MT имеет ссылку специально для 64-битных машин и различные тестовые результаты для 32- и 64-битных версий.
Самый простой подход (если это действительно универсальный MT) - это сравнить его с хорошо известной библиотекой MT с тем же начальным числом.
Aloha!
Как сказал кто-то другой - используйте известные тестовые векторы ответов для своих алгоритмов. Если вы соответствуете тестовым векторам, вы можете быть уверены, что ваш генератор работает.
Если вы действительно хотите проверить генератор. Используйте тесты DIEHARD ++, реализованные инструментом Dieharder: