反復して ran を呼び出すと、均一した分布で一連の乱数を生成します。lcrans(3m) を参照してください。
|
r = ran( i ) |
|||
|
i |
INTEGER*4 |
入力 |
変数または配列要素 |
|
r |
REAL |
出力 |
変数または配列要素 |
例: ran:
demo% cat ran1.f
* ran1.f -- 乱数を生成する。
INTEGER*4 i, n
real r(10)
i = 760013
do n = 1, 10
r(n) = ran ( i )
end do
write ( *, "( 5 f11.6 )" ) r
end
demo% f95 ran1.f
demo% a.out
0.222058 0.299851 0.390777 0.607055 0.653188
0.060174 0.149466 0.444353 0.002982 0.976519
demo%
|
次の点に注意してください。
0.0 は範囲に含まれますが、1.0 は含まれません。
乗算合同型の一般乱数発生アルゴリズムを使用しています。
一般に、i の値は呼び出し元のプログラム実行中に一度だけ設定されます。
i の初期値は大きい奇数の整数でなければなりません。
ran を呼び出すごとに、次の乱数が順に得られます。
プログラムを実行するたびに異なる乱数の列を得るには、実行ごとに引数を異なる初期値に設定しなければなりません。
ran は引数を使用して、下記のアルゴリズムに従い、次の乱数を計算するための値を格納します。
SEED = 6909 * SEED + 1 (MOD 2**32) |
SEED は 32 ビット数値を含み、上位 24 ビットは浮動小数点に変換され、その値が返されます。