XL Fortran for AIX V8.1.1

ランゲージ・リファレンス

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 でなければなりません。

+--------------------------------IBM 拡張の終り-------------------------------+

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

Random_seed を使用すると、2 つの乱数発生ルーチンを切り換えることができます。乱数発生ルーチン 1 がデフォルトです。各乱数発生ルーチンは、それぞれ専用のシードを維持し、通常は、最後に生成した数の次の数からサイクルを再開します。

乱数発生ルーチン 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 に設定されます。

+--------------------------------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


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]