式をシードとして与えて生成された乱数を返します。
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
なし。