答えは「数学のため」ではないかと思いますが、誰かが基本的なレベルでもう少し洞察を与えてくれることを望んでいました...
今日は、BCLソースコードをざっと見て、以前に使用したクラスの一部が実際にどのように実装されているかを確認しました。(疑似)乱数を生成する方法についてこれまで考えたことがないので、どうやってそれを行うかを確認することにしました。
ここで完全なソース:http : //referencesource.microsoft.com/#mscorlib/system/random.cs#29
private const int MSEED = 161803398;
このMSEED値は、Random()クラスがシードされるたびに使用されます。
とにかく、私はこの「マジックナンバー」-161803398-を見ました、そして私はそのナンバーが選ばれた理由について最も曖昧な考えを持っていません。これは素数でも2の累乗でもありません。より重要であるように見える数の「中間」ではありません。私はそれを2進数と16進数で見て、まあ、それは私には数のように見えました。
Googleで番号を検索してみましたが、何も見つかりませんでした。
The current implementation of the Random class is based on Donald E. Knuth's subtractive random number generator algorithm. For more information, see D. E. Knuth. "The Art of Computer Programming, volume 2: Seminumerical Algorithms". Addison-Wesley, Reading, MA, second edition, 1981.
inextp = 31;
が、Random
クラスのソースコードにはinextp = 21;
、誰かがタイプミスしたためにこのバグが発生したように表示されます。