tail head cat sleep
QR code linking to this page

manページ  — RAND48

名称

drand48, erand48, lrand48, nrand48, mrand48, jrand48, srand48, seed48, lcong48 – 疑似乱数ジェネレータと初期化ルーチン

内容

ライブラリ

Standard C Library (libc, -lc)

書式

#include <stdlib.h>

double
drand48(void);

double
erand48(unsigned short xseed[3]);

long
lrand48(void);

long
nrand48(unsigned short xseed[3]);

long
mrand48(void);

long
jrand48(unsigned short xseed[3]);

void
srand48(long seed);

unsigned short *
seed48(unsigned short xseed[3]);

void
lcong48(unsigned short p[7]);

解説

rand48() ファミリの関数は、サイズが 48ビットの整数で動作する、一次的に一致した アルゴリズムを使用して疑似乱数を作成します。採用されている公式は r(n+1) = (a * r(n) + c) mod m で、被乗数 a のデフォルト値は 0xfdeece66d = 25214903917、加数 c のデフォ ルト値は 0xb = 11 です。法 m は、常に 2 ** 48 に固定されています。r(n) は、乱数ジェネレータの種を呼び出します。

以下で説明する 6つのジェネレータルーチンでは、最初の演算ステップでアル ゴリズムが 1回実行されます。

drand48()erand48() は、ダブルタイプの値を戻します。r(n+1) の 48ビット全体は戻り値の仮数に ロードされ、指数は作成された値が区間[0.0, 1.0)に存在するように設定され ます。

lrand48()nrand48() は、範囲[0, 2**31-1]でロングタイプの値を戻します。r(n+1) の上位(31)ビッ トは戻り値の下位ビットにロードされ、最上位(符号)ビットは 0に設定されます。

mrand48()jrand48() は、範囲[-2**31, 2**31-1]でロングタイプの値を戻します。r(n+1)の上位 (32)ビットは、戻り値にロードされます。

drand48(), lrand48(), mrand48(), は、内部バッファを使用して r(n) を保存します。この関数では、r(0) の初 期値が 0x1234abcd330e = 20017429951246 になっています。

erand48(), nrand48(), jrand48() は、ユーザが指定したバッファを使用して r(n) を保存します。このバッファ は 3つのショートから構成されており、0番目のメンバには最下位ビットが入 ります。

すべての関数は、同じ被乗数と加数を共有します。

srand48() は、種の値の 32ビットを r(n) の上位 32ビットにコピーし、r(n)の下位 16 ビットを 0x330e に設定して、 drand48(), lrand48(), mrand48() の内部バッファ r(n) を初期化します。アルゴリズムの定被乗数と加数は、上 記のデフォルト値にリセットされます。

seed48()drand48(), lrand48(), mrand48() の内部バッファ r(n) を初期化しますが、種の 48ビット全体が 3つのショー トの配列に指定され、0番目のメンバは最下位ビットを指定します。アルゴリ ズムの定被乗数と加数は、上記のデフォルト値にリセットされます。 seed48() は、古い種を含む、3つのショートの配列を指すポインタを戻します。この配 列は静的に割り振られるため、 seed48() を呼び出すたびに内容は失われます。

lcong48() では、 drand48(), erand48(), lrand48(), nrand48(), mrand48(), jrand48() で使用される被乗数と加数、および drand48(), lrand48(), mrand48() で使用される種を完全に制御できます。パラメータとしては、7つのショート の配列が渡されます。最初の 3つのショートは種の初期化に、次の 3つは被乗 数の初期化に、最後のショートは加数の初期化に使用されます。このため、 0xffff より大きい値を加数として使用することはできません。

乱数ジェネレータの種を作る 3つすべての手法は、6つのジェネレータの呼び 出し用に被乗数と加数を常に設定することに注意してください。

より強力な乱数ジェネレータが必要な場合は、 random(3) を使用してください。

作者

Martin Birgmeier

関連項目

rand(3), random(3)

RAND48 (3) October 8, 1993

tail head cat sleep
QR code linking to this page


このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.

What will happen when the 32-bit Unix date goes negative in mid-January 2038 does not bear thinking about.
— Henry Spencer