サーチ…


前書き

Randomクラスは、本当にランダムではない非負の疑似乱数を生成するために使用されますが、一般的な目的には十分近いです。

シーケンスは初期番号( シードと呼ばれます)を使用して計算されます。以前のバージョンの.netでは、このシード番号はアプリケーションが実行されるたびに同じでした。だから、アプリケーションが実行されるたびに同じ擬似乱数列を得るということが起こります。さて、シードは、オブジェクトが宣言された時間に基づいています。

備考

最後に、ランダム化についての注釈。前述のように、パラメータなしでRandomインスタンスを宣言すると、コンストラクタは現在の時刻を計算の一部として使用して初期シード番号を作成します。通常これはOKです。

しかしながら。非常に短い時間間隔で新しいインスタンスを再宣言すると、シード番号が計算されるたびに、時間は同じになる可能性があります。このコードを考えてみましょう。

For i As Integer = 1 To 100000
    Dim rnd As New Random
    x = rnd.Next
Next

最近のコンピュータは非常に高速であるため、このコードの実行には数分の1秒かかります。また、ループのいくつかの不確定な繰り返しでは、システム時間は変更されません。したがって、シード番号は変更されず、乱数も同じになります。たくさんの乱数を生成したい場合、この単純な例では、ループの外側にrandomのインスタンスを宣言してください。

Dim rnd As New Random
For i As Integer = 1 To 100000
    x = rnd.Next
Next

経験則の基本は、乱数ジェネレータを短期間に再インスタンス化しないことです。

インスタンスの宣言

Dim rng As New Random()

これは、 rngというRandomクラスのインスタンスを宣言します。この場合、オブジェクトが作成された時点の現在時刻がシードの計算に使用されます。これは最も一般的な使用方法ですが、後述のように独自の問題があります

プログラムが現在の時刻を初期シード番号の計算の一部として使用するのではなく、最初のシード番号を指定することができます。これは32ビットの整数リテラル、定数または変数です。例は下記を参照してください。そうすることで、インスタンスが同じシーケンスの擬似乱数を生成することになります。この擬似乱数は、特定の状況で役立ちます。

Dim rng As New Random(43352)

または

Dim rng As New Random(x)

xはプログラムのどこかで整数定数または変数として宣言されています。

乱数のインスタンスから乱数を生成する

次の例では、Randomクラスの新しいインスタンスを宣言し、メソッド.Nextを使用して、擬似乱数のシーケンスの次の番号を生成します。

Dim rnd As New Random
Dim x As Integer
x = rnd.Next

上記の最後の行は、次の疑似乱数を生成してx代入します。この数値は0〜2147483647の範囲になります。ただし、以下の例のように生成する数値の範囲を指定することもできます。

x = rnd.Next(15, 200)

ただし、これらのパラメータを使用すると、数値の範囲は15以上199以下になります。

.NextDoubleを使用してDouble型の浮動小数点数を生成することもできます。

Dim rnd As New Random
Dim y As Double
y = rnd.NextDouble()

ただし、範囲を指定することはできません。常に0.0〜1.0未満の範囲になります。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow