ループで乱数生成の問題を理解する
問題:
ループ内でRandom.Next
を使用して乱数を生成する場合、一般的な問題が発生します。 反復ごとにループ内に新しいRandom
オブジェクトを作成すると、繰り返されるまたは予測可能な「ランダム」数が観察されることがよくあります。これは特に、急速に実行されているループで当てはまります
説明:
根本原因は、オブジェクトの初期化にあります。 各Random
インスタンスは、システムクロックを使用してシードされます。 複数のインスタンスが非常に短い時間枠内で作成されている場合(ループで頻繁に発生するように)、同じ種子値を受け取ります。 これにより、各Random
オブジェクトが擬似ランダム数の同じシーケンスを生成することにつながります。
Random
ソリューションは簡単です:ループの外側に
単一オブジェクトを作成し、ループ内のすべての乱数世代について再利用します。これにより、一貫した、しかし予測不可能な乱数シーケンスが生成されることが保証されます。 必要に応じて、この単一のインスタンスを乱数を必要とする方法に渡します。
以上がなぜランダム.nextがループで繰り返し値を生成するのですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。