seed48() - 疑似乱数初期化指定子

標準

標準/拡張機能 C/C++ 依存項目

XPG4
XPG4.2
Single UNIX Specification、バージョン 3

両方  

形式

#define _XOPEN_SOURCE
#include <stdlib.h>

unsigned short int *seed48(unsigned short int seed16v[3]);

機能説明

関数 drand48()、erand48()、jrand48()、lrand48()、mrand48()、および nrand48() は、線 形合同アルゴリズムと 48 ビット整数算術を使用して、一様分布疑似乱数を生成します。

関数 lcong48()、seed48()、および srand48() は初期化関数であり、こ のうちの 1 つを、関数 drand48()、lrand48()、または mrand48() のいずれかが 呼び出される前に、呼び出す必要があります。

関数 drand48()、lrand48()、および mrand48() は、以下の線形合同数式に従って、48 ビット整数値 X(i) のシーケンスを生成します。
   X(n+1) = (aX(n) + c)mod(2**48)     n>=0
X、a、および c の初期値は以下のとおりです。
   X(0)= 1
   a   = 5deece66d (base 16)
   c   = b         (base 16)

C/370™ は、シーケンスの最新の 48 ビット整数値 X(i) を保管するストレージを提供します。このストレージは、関数 drand48()、lrand48()、および mrand48() で共用されます。seed48() 関数は、このストレージ内の最新の 48 ビット値を、再初期化する場合に使用します。seed48() 関数は、このストレージの下位 (右端) の 16 ビット を seed16v[0] で置き換え、中位の 16 ビット を seed16v[1] で置き換え、さらに高位の 16 ビット を seed16v[2] で置き換えます。

値 a と c は、lcong48() 関数を呼び出すことによって変更されること があります。seed48() 関数は、a と c の初期値を復元します。

z/OS®UNIX サービスの特殊な動作: drand48 ファミリーの関数を呼び出す前に、環境変数 _RAND48 を値 THREAD に設定することによって、seed48() 関数および drand48 ファミリーのその他の関数を スレッド固有にすることができます。

drand48 ファミリーにスレッド固有の動作を要求しない場合は、マルチスレッド・アプリケーションで関数が呼び出されるとき、C/370 により drand48 ファミリーの関数ごとに X(n)、a、および c 用のストレージへのアクセスが シリアライズされます。

スレッド特定の動作が要求されている場合は、スレッド t からの関数 drand48()、 lrand48()、および mrand48() の呼び出しにより、以下の線形合同の公式に従って、48 ビット整数値 X(t,i) のシーケンスが生成されます。
   X(t,n+1) = (a(t)X(t,n) + c(t))mod(2**48)     n>=0

C/370 によりスレッド固有のストレージが提供され、シーケンスの最新の 48 ビット整数値 X(i) が保管されます。seed48() 関数がスレッド t から呼び出されると、この関数はストレージ内の最新の 48 ビット値を再初期化します。seed48() 関数は、このストレージの下位 (右端) の 16 ビット を seed16v[0] で置き換え、中位の 16 ビット を seed16v[1] で置き換え、さらに高位の 16 ビット を seed16v[2] で置き換えます。

a(t) および c(t) の値は、スレッド t から lcong48() 関数を呼び出すことによって変更できます。seed48() 関数がこのスレッドから呼び出される場合は、以下のようなスレッドの a(t) および c(t) の初期値が復元されます。
   a(t)   = 5deece66d (base 16)
   c(t)   = b         (base 16)

戻り値

seed48() が呼び出される場合は、シーケンスの最新の値 X(i) 用のストレージを再初期化する前に、C/370 によって提供された符号なし短精度整数の配列にシーケンスの最新の 48 ビット整数値 X(i) が保管されます。seed48() は、保管値が入っている配列へのポインターを戻します。

z/OSUNIX サービスの特殊な動作: スレッド固有の動作が drand48 ファミリーに対して要求され、seed48 () がスレッド t で呼び出される場合は、シーケンスの最新の値 X(t,i) 用のストレージの再初期化の前に、符号なし短精度整数のスレッド固有の配列にシーケンスの最新の 48 ビット整数値 X(t,i) が保管されます。 seed48() は、保管値が入っているこのスレッド固有の配列へのポインターを戻します。

関連情報