重複の可能性:
1 つの乱数のみを生成する乱数ジェネレーター
大規模なシステムで観察された動作を次のコード シーケンスにまとめました。
for (int i = 0; i < 100; i++)
{
Random globalRand = new Random(0x3039 + i);
globalRand.Next();
globalRand.Next();
int newSeed = globalRand.Next();
Random rand = new Random(newSeed);
int value = rand.Next(1, 511);
Console.WriteLine(value);
}
これを Visual Studio 2012 ターゲット .NET 4.5 から実行すると、316 または 315 のいずれかが出力されます。これを 100 反復を超えて拡張すると、値がゆっくりと減少することがわかります (314、313...)。誰もが「ランダム」と考えるでしょう。
編集
StackOverflow には、乱数がランダムではない理由を尋ねる質問がすでにいくつかあることを認識しています。ただし、これらの質問には、a) Random オブジェクト インスタンスにシードを渡さない (または同じシードを渡す) か、b) NextInt(0, 1)
2 番目のパラメーターが排他的境界であることを認識していないなどの問題があります。これらの問題はどちらも、この質問には当てはまりません。