1

重複の可能性:
同じバージョンの.NETFrameworkを対象とする乱数シード

アプリケーションが.NETFramework3.5をターゲットにしている場合、すべてのCPUは同じシードに基づいて同じランダムシーケンスを返しますか?私と同じ結果が得られるのではないかと思います。また、アプリケーションを配布するすべての人が同じ結果を得られることを望んでいます。ありがとう!

Random a = new Random(44448); 
int i1 = a.Next(65, 90); 
MessageBox.Show(i1.ToString()); 
4

1 に答える 1

0

はい、同じシードを使用すると、毎回同じ乱数が同じ順序で取得されます。それは設計によるものです。これを行う場合の例:

  • プログラムをテストするときは、固定シードを使用して同じ結果を得ることができます。
  • プログラムで使用されているシードをログに記録し、問題が発生した場合は、結果の乱数を特定できるため、バグの再現を試みることができます。
  • パフォーマンスを測定したい場合は、固定シードを使用して、実行ごとに異なるデータを取得しないようにすることができます。

デフォルトでは (シードを指定しない場合)、システム時間が使用されます。ここでの一般的な考え方は、単一の「乱数」を取得し、それを使用してさらに多くの「乱数」を作成できるということです。現在の時間を非常に小さなレベルの精度まで下げると、実際にはランダムになります。Randomほとんどの場合、 (同じシードを持たないように) 近すぎる新しいインスタンスを作成しない限り、このデフォルトの動作は受け入れられます。より安全なアルゴリズムを使用して乱数を生成し、それをシードとして渡すこともできます。(私が見た 1 つの例は、新しい GUID を作成し、それをシードとして渡すことです。これは実際にはまともなアイデアです。)

于 2012-07-23T19:49:14.570 に答える