RANDOM 関数

目的

式をシードとして与えて生成された乱数を返します。

構文

RANDOM(x)

パラメーター

x は計算型の式としなければなりませんが、算術型にできるようにもする必要があります。

説明

RANDOM 関数は、式 x をシードとして与えて生成された乱数を返します。式を省略した場合は、シードが与えられた最後の RANDOM 関数のシードを使用して乱数が生成されます。シードが与えられた RANDOM 関数がこれまでに呼び出されていない場合のデフォルトのシードは 1 です。

シードとして使用される式 x が数値の場合は実数でなければなりません。FIXED BINARY(31,0) に指定されていない場合は変換されます。

x が 0 より大きく 2,147,483,646 以下でなければ、ERROR 条件が発生します。

RANDOM の出力は、0 と 1 の間に分布する値になります。次の乗算合同法を使用して生成されます。

seed(x) = mod(950706376 * seed(x - 1), 2147483647)
random(x) = seed(x) / 2147483647

シードはプログラム レベルで維持されます。

rand: proc options(main);

    dcl x float bin (52);
    dcl i fixed bin (31);

    put skip list ('---- seed: 10 -------------');
    x = random(10);
    put skip list (x);

    do i = 1 to 6;
       x = random();
       put skip list (x);
    end;

    put skip list ('---- seed: 100000 ---------');

    x = random(100000);
    put skip list (x);

    do i = 1 to 6;
       x = random();
       put skip list (x);
    end;
end;

次のように表示されます。

---- seed: 10 -------------
 9.843643940912393E-001
 3.341328461347766E-001
 1.034361082610842E-001
 5.866471489829230E-001
 7.405739988854965E-001
 3.124010266328235E-001
 7.504689692288959E-001
---- seed: 100000 ---------
 2.727828287858436E-001
 4.692549409667286E-001
 1.388299465825921E-001
 3.343486782788991E-001
 9.890356291965748E-002
 8.330502211270156E-001
 3.848663831059199E-001

制約事項

なし。