CenterSpaceからダウンロードした Mersenne Twister の C# 実装を使用しています。私はそれに2つの問題があります:
- どのようにアルゴリズムをシードしても、 DieHard テストに合格しません。つまり、p 値に対してかなりの数の 1 と 0 が得られるということです。また、269 個の p 値に対する私の KStest は 0 です。まあ、p 値を完全に解釈することはできませんが、結果に含まれる 1 と 0 の数は悪いニュースだと思います。
- 数字のランダム性を視覚的に示すように依頼されました。そのため、生成された数値をプロットしますが、これはまったくランダムではないようです。数秒後と数秒後の結果の 2 つのスクリーンショットを次に示します。2 番目のスクリーンショットでわかるように、数字はいくつかの平行線上にあります。数値をポイントにマップするためにさまざまなアルゴリズムを試しました。それらはすべて平行線になりますが、角度が異なります。これは、これらのスクリーンショットのポイントに数字をマッピングする方法です: . ご想像のとおり、視覚的な結果はフォームの幅と高さに依存し、これは悲惨な結果です。
new Point(number % _canvasWidth, number % _canvasHeight)
アルゴリズムをシードしようとしたいくつかの方法を次に示します。
- ユーザーエントリー。いくつかの数値を入力して、アルゴリズムを int 配列としてシードします。
- アルゴリズム自体が生成する乱数!!
- の配列
new Guid().GetHashCode()
ここで何が欠けていますか?アルゴリズムをどのようにシードすればよいですか? ダイハードを通過させるにはどうすればよいですか?