最近、64 ビットinteger
(またはlong
) 用の MersenneTwister を実装しました。私の実装が十分な解決策であるかどうかを知ることができるように、PRNGをテストする方法のガイドまたは例はありますか? 私の実装が十分に均一な分布を持っているかどうかを確認する方法に特に興味があります。
具体的には、これが MersenneTwister に結び付けられているほど良いです。
メルセンヌツイスターアルゴリズムをテストする必要はありません。これは、彼らが何をしているのかを本当に知っている人々によって何度も行われています。アルゴリズムを正しく実装したかどうかをテストするだけです。
メルセンヌツイスターのWebサイトにアクセスして、テスト出力を取得できます。それらと同じ一連の出力を生成する場合は、おそらくアルゴリズムが正しく実装されています。
MTサイトには、64ビットマシン専用のリンクと、32ビットバージョンと64ビットバージョン用のさまざまなテスト出力があることに注意してください。
PRNG の標準的な一連のテストはDiehard Testsです。
最も簡単なアプローチ (本当に一般的な MT の場合) は、同じシードを持つ既知の適切な MT ライブラリと比較することです。
アロハ!
他の誰かが言ったように、アルゴリズムには既知の答えのテストベクトルを使用してください。テスト ベクトルを満たす場合は、ジェネレーターが動作することを合理的に確信できます。
本当にジェネレーターをテストしたい場合。Dieharder ツールによって実装されている DIEHARD テスト ++ を使用します。