RANDOM_SEED(SIZE, PUT, GET, GENERATOR)

目的

RANDOM_NUMBER によって使用された疑似乱数発生ルーチンを再始動または照会します。

クラス

サブルーチン

引き数の型と属性

引き数がちょうど 1 つだけか、またはまったく存在しないかの どちらかでなければなりません。

SIZE (オプション)
スカラーで、型はデフォルトの整数でなければなりません。 これは、INTENT(OUT) 引き数です。 8 バイト変数であるシード値を保持するのに 必要なデフォルト型の整数 (N) の数に設定されます。

PUT (オプション)
ランク 1 でサイズが N 以上のデフォルトの整数配列でなければなりません。 これは、INTENT(IN) 引き数です。 現行の乱数発生ルーチン用のシードがここから転送されます。

GET (オプション)
ランク 1 でサイズが N 以上のデフォルトの整数配列でなければなりません。 これは、INTENT(OUT) 引き数です。 現行の乱数発生ルーチン用のシードがここに転送されます。

+----------------------------------IBM 拡張----------------------------------+

GENERATOR (オプション)
スカラーで、型はデフォルトの整数でなければなりません。これは、INTENT(IN) 引き数です。 この値は、以後使用する乱数発生ルーチンを決定します。 値は、1 または 2 でなければなりません。

+------------------------------End of IBM 拡張-------------------------------+

+----------------------------------IBM 拡張----------------------------------+

Random_seed を使用すると、2 つの乱数発生ルーチンを切り替えることができます。 乱数発生ルーチン 1 がデフォルトです。 各乱数発生ルーチンは、それぞれ専用のシードを維持し、 通常は、最後に生成した数の次の数からサイクルを再開します。 有効なシードは、乱数発生ルーチン 1 の場合は 1.0 から 2147483647.0 (2.0**31-1) の間の整数、 乱数発生ルーチン 2 の場合は 1.0 から 281474976710656.0 (2.0**48) の間の整数になります。

乱数発生ルーチン 1 は、次の式により、乗算合同式法を使用します。

S(I+1) = ( 16807.0 * S(I) ) mod (2.0**31-1)

かつ

X(I+1) = S(I+1) / (2.0**31-1)

乱数発生ルーチン 1 は、2**31-2 の乱数後に循環します。

乱数発生ルーチン 2 も、次の式により、乗算合同式法を使用します。

S(I+1) = ( 44,485,709,377,909.0 * S(I) )
              mod (2.0**48)

かつ

X(I+1) = S(I+1) / (2.0**48)

乱数発生ルーチン 2 は、(2**46) 個の乱数発生後に循環します。 乱数発生ルーチン 1 がデフォルトになっていますが (以前のバージョンとの互換性 を保つため)、乱数発生ルーチン 1 よりも乱数発生ルーチン 2 の方が実行が速く、 循環するまでの間隔も長くなっているため、新しいプログラムでは乱数発生ルーチン 2 を 使用することをお勧めします。

引き数が存在しない場合は、現行の乱数発生ルーチンのシードは デフォルト値 1d0 に設定されます。

+------------------------------End of IBM 拡張-------------------------------+

CALL RANDOM_SEED
   ! Current generator sets its seed to 1d0
CALL RANDOM_SEED (SIZE = K)
   ! Sets K = 64 / BIT_SIZE( 0 )
CALL RANDOM_SEED (PUT = SEED (1 : K))
   ! Transfer seed to current generator
CALL RANDOM_SEED (GET = OLD (1 : K))
   ! Transfer seed from current generator
IBM Copyright 2003