RANDOM.SEED.1オプションおよびRANDOM.SEED.2オプションは、乱数の計算時にRANDOMによって使用される値を指定します。RANDOMは、数値を計算するためにオプションRANDOM.SEED.1およびRANDOM.SEED.2を使用し、その後で次回の値を変更します。
アプリケーション・プログラムの開発およびデバッグ時に同じ乱数列を再生成する場合、RANDOMを使用する前にRANDOM.SEED.1およびRANDOM.SEED.2を特定の値に設定します。
使用上の注意
同じ乱数列の再生成
例8-64「乱数の生成」に示されているように、アプリケーション・プログラムの開発およびデバッグ時に同じ乱数列を再生成する場合、RANDOMを使用する直前にRANDOM.SEED.1およびRANDOM.SEED.2を特定の値に設定します。その数列を繰り返し生成するには、RANDOMを再び使用する直前にこれらのオプションを同じ値に設定します。これにより、作成したプログラムの動作が異なる場合、乱数列の相違ではなくプログラムの相違が原因であることがわかります。
例
例5-92 テストのためのRANDOMの明示的なシード指定
アナリティック・ワークスペースに次のディメンションおよび変数があるとします。
DEFINE id DIMENSION TEXT DEFINE myvar VARIABLE INTEGER <id>
次のコードに示すとおり、最初にシード指定せずにRANDOMを使用してmyvar
を移入します。RANDOMが実行されるたびに異なる値がOracle OLAPによってmyvar
に移入されます。
myvar = 0 myvar = RANDOM (10, 20) REPORT myvar ID MYVAR -------------- ---------- a1 11 a2 19 a3 14 myvar = 0 myvar = RANDOM (10, 20) REPORT myvar ID MYVAR -------------- ---------- a1 16 a2 13 a3 12
次に、myvar
に対して予測可能な値を作成するRANDOMを使用するテストを記述します。次のコードに示すように、RANDOMの結果がその時々で同じになるようにするには、RANDOM.SEED.1およびRANDOM.SEED.2の値をRANDOMの実行直前に設定する必要があります。
myvar = 0 RANDOM.SEED.1 = 5 RANDOM.SEED.2 = 3 myvar = RANDOM (10, 20) REPORT myvar ID MYVAR -------------- ---------- a1 10 a2 16 a3 13 myvar = 0 RANDOM.SEED.1 = 5 RANDOM.SEED.2 = 3 myvar = RANDOM (10, 20) REPORT myvar ID MYVAR -------------- ---------- a1 10 a2 16 a3 13
RANDOM.SEED.1およびRANDOM.SEED.2に対して設定した値は、セッション全体を通して同じ値に保たれるわけではありません。次のコードに示すように、実行直前に毎回同じ値をシード指定しなかった場合、RANDOMによって生成される値は同じにはなりません。
myvar = 0RANDOM.SEED.1 = 5 RANDOM.SEED.2 = 3 myvar = RANDOM (10, 20) REPORT myvar ID MYVAR -------------- ---------- a1 10 a2 16 a3 13 myvar = 0 myvar = RANDOM (10, 20) REPORT myvar ID MYVAR -------------- ---------- a1 11 a2 16 a3 20