標準/拡張機能 | C/C++ | 依存項目 |
---|---|---|
XPG4 |
両方 |
#define _XOPEN_SOURCE
#include <stdlib.h>
void srand48(long int seedval);
関数 drand48()、erand48()、jrand48()、lrand48()、mrand48()、および nrand48() は、線 形合同アルゴリズムと 48 ビット整数算術を使用して、一様分布疑似乱数を生成します。
関数 lcong48()、seed48()、および srand48() は初期化関数であり、こ のうちの 1 つを、関数 drand48()、lrand48()、または mrand48() のいずれかが 呼び出される前に、呼び出す必要があります。
X(n+1) = (aX(n) + c)mod(2**48) n>=0
X(0)= 1
a = 5deece66d (base 16)
c = b (base 16)
C/370™ は、シーケンスの最新の 48 ビット整数値 X(i) を保管するストレージを提供します。このストレージは、関数 drand48()、lrand48()、および mrand48() で共用されます。srand48() 関数は、このストレージ内の最新の 48 ビット値を再初期化するのに使用します。srand48() 関数によって、このストレージの高位 (左端) 32 ビット が、seedval 引数値に置き換えられます。srand48() 関数によって、このストレージの下位 16 ビットが、値 330E (基数 16) と置き換えられます。
値 a と c は、lcong48() 関数を呼び出すことによって変更されること があります。srand48() 関数は、a と c の初期値を復元します。
z/OS®UNIX サービスの特殊な動作: drand48 ファミリーの関数を呼び出す前に、環境変数 _RAND48 を値 THREAD に設定することによって、srand48() 関数および drand48 ファミリーの その他の関数をスレッド固有のものにすることができます。
drand48 ファミリーにスレッド固有の動作を要求しない場合は、マルチスレッド・アプリケーションで関数が呼び出されるとき、C/370 により drand48 ファミリーの関数ごとに X(n)、a、および c 用のストレージへのアクセスが シリアライズされます。
X(t,n+1) = (a(t)X(t,n) + c(t))mod(2**48) n>=0
C/370 によりスレッド固有のストレージが提供され、シーケンスの最新の 48 ビット整数値 X(i) が保管されます。srand48() 関数は、スレッド t から呼び出されると、このストレージ内の最新の 48 ビット値を再初期化します。srand48() 関数によって、このストレージの高位 (左端) 32 ビット が、seedval 引数値に置き換えられます。srand48() 関数によって、このストレージの下位 16 ビットが、値 330E (基数 16) と置き換えられます。
a(t) = 5deece66d (base 16)
c(t) = b (base 16)
srand48() は、値を戻しません。
srand48() は、シーケンス内の最新の 48 ビット整数値、X(i) 用のストレージを再初期化するために、引数 seedval の値を使用して、a と c の初期値を復元した後に、戻ります。
z/OSUNIX サービスの特殊な動作: スレッド固有の動作が drand48 ファミリーに対して要求され、srand48() 関数がスレッド t で呼び出されると、この関数で引数 seedval の値が使用され、シーケンス内の最新の 48 ビット整数値 X(t,i) のストレージが スレッド用に再初期化されます。 またこの関数で、スレッドの a(t) および c(t) の初期値も 復元されます。その後、この関数は戻ります。