erand48() - 疑似乱数の生成

標準

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

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

両方  

形式

#define _XOPEN_SOURCE
#include <stdlib.h>

double erand48(unsigned short int x16v[3]);

機能説明

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

関数 drand48() と erand48() は、区間 [0.0,1.0) に一様に分布する、負でない倍精度の浮動小数点値を戻します。 これらの関数は、戻り値が、呼び出しスレッドの浮動小数点モードを基にした正しい浮動小数点形式 (16 進または IEEE) で与えられるように拡張されています。

関数 lrand48() と nrand48() は、区間 [0,2**31) に一様に分布する負でない長整数を戻します。

関数 mrand48() と jrand48() は、区間 [-2**31,2**31) に 一様に分布する符号付き長整数を戻します。

erand48() 関数は、下記の線形合同公式に従って、48 ビット整数値 X(i) の シーケンス内の次の 48 ビット整数値を生成します。
X(n+1) = (aX(n) + c)mod(2**48)     n>=0

erand48() 関数は、引数配列 x16v[3] によって提供されるストレージを使用して、順番に最新の 48 ビットの整数値 X(i) を保管します。erand48() 関数は、この値の下位 (右端) の 16 ビットに x16v[0]、中位の 16 ビットに x16v[1]、高位の 16 ビットに x16v[2] を使用します。

a と c の初期値は次のとおりです。
a   = 5deece66d (base 16)
c   = b         (base 16)

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

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

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

スレッド固有の動作が要求され、erand48() 関数 がスレッド t から呼び出された場合、erand48() 関数は、以下の 線形合同公式に従って、48 ビット整数値 X(t,i) のシーケンス内 の次の 48 ビット整数値を、そのスレッドのために生成します。
X(t,n+1) = (a(t)X(t,n) + c(t))mod(2**48)     n>=0

erand48() 関数は、引数配列 x16v[3] によって提供 されるストレージを使用して、順番に最新の 48 ビットの整数値 X(t,i) を保管します。erand48() 関数は、この値の下位 (右端) の 16 ビットに x16v[0]、中位の 16 ビットに x16v[1]、高位の 16 ビットに x16v[2] を使用します。

スレッド t 上の a(t) と c(t) の初期値は次のとおりです。
a(t)   = 5deece66d (base 16)
c(t)   = b         (base 16)

値 a(t) と c(t) は、スレッド t から lcong48() 関数を 呼び出すことにより変更できます。初期値 a(t) と c(t) は、seed48() または srand48() のいずれかの関数がそのスレッドから呼び出された ときに復元されます。

戻り値

erand48() は、引数配列 x16v[3] によって提供されたストレージに、生成された 48 ビット値 X(n+1) を保管します。erand48() は、生成された 48 ビット値を [0.0,1.0) の区間で倍精度浮動小数点値に変換し、この変換した値を戻します。

z/OSUNIX サービスの特殊な動作: drand48 ファミリーのためにスレッド固有の動作が要求され、erand48() が、スレッド t で呼び出された場合、erand48() は、引数配列 x16v[3] によって提供されたストレージに、生成された 48 ビット値 X(t,n+1) を保管します。erand48() は、生成された 48 ビット値を [0.0,1.0) の区間で倍精度浮動小数点値に変換し、この変換した値を戻します。

関連情報