EN JA
DRAND48(3)
DRAND48(3) Linux Programmer's Manual DRAND48(3)

名前

drand48, erand48, lrand48, nrand48, mrand48, jrand48, srand48, seed48, lcong48 -一様分布する疑似乱数を生成する関数

書式


#include <stdlib.h>
 

double drand48(void);
 

double erand48(unsigned short xsubi [3]);
 

long int lrand48(void);
 

long int nrand48(unsigned short xsubi [3]);
 

long int mrand48(void);
 

long int jrand48(unsigned short xsubi [3]);
 

void srand48(long int seedval );
 

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

void lcong48(unsigned short param [7]);
 

glibc 向けの機能検査マクロの要件 ( feature_test_macros(7) 参照):
 
上記の全ての関数: _SVID_SOURCE || _XOPEN_SOURCE

説明

これらの関数は線形合同アルゴリズムと 48ビット整数演算を用いて疑似乱数を生成する。

関数 drand48() と erand48() は、区間 [0.0, 1.0) で一様分布する非負の倍精度浮動小数点実数値を返す。

関数 lrand48() と nrand48() は 0 と 2^31 の間で一様分布する非負のロング整数を返す。

関数 mrand48() と jrand48() は-2^31 と 2^31 の間で一様分布する符号付きロング整数を返す。

関数 srand48(), seed48(), lcong48() は初期化関数である。関数 drand48(), lrand48(), mrand48() を使用する前に、これらの初期化関数のいずれかを呼ぶべきである。関数 erand48(), nrand48(), jrand48() は初めに初期化関数を呼ぶことを必要としない。

ここで説明しているすべての関数は 48ビットの整数のシーケンス ( Xi) を生成することで機能している。生成方法は以下の線形合同の式による。

 
Xn+1 = (aXn + c) mod m,


 

ここで n >= 0 である。パラメータが m = 2^48 であるため、48ビット整数演算が行われている。 lcong48() が呼ばれていない場合、 ac は以下の式で与えられる。

 
a = 0x5DEECE66D
c = 0xB


 

関数 drand48(), erand48(), lrand48(), nrand48(), mrand48(), jrand48() で返される値は次のようにして計算される。はじめに、次の48ビットの Xi が計算される。そして、返すべきデータの型に依存した適切なビット数が Xi の上位ビットからコピーされる。最後に、この値を返り値に変換する。

関数 drand48(), lrand48(), mrand48() は最後に生成された48ビットの Xi を内部バッファに格納する。配列の形の引数 xsubi に個々の Xi の値を格納できるような領域を確保することを、関数 erand48(), nrand48(), jrand48() は、呼び出し側のプログラムに要求する。これらの関数は、はじめてそれらの関数を呼ぶ前に Xi の初期値を配列に代入することで初期化される。

初期化関数 srand48() は、 Xi の上位32ビットを引数 seedval に設定する。下位の16ビットは、適当に決められた値である0x330Eに設定される。

初期化関数 seed48() は、 Xi の値を、配列の形をした引数である seed16v の中で指定された 48ビットの値に設定する。 Xi の前の値は内部バッファにコピーされ、このバッファへのポインタが seed48() によって返される。

初期化関数 lcong48() は使用者が Xi, a, c の初期値を指定するための関数である。配列の形をした引数の要素はそれぞれ、 param[0-2]Xi を、 param[3-5]a を、 param[6]c を指定するものである。 lcong48() が呼ばれた後で、 srand48() か seed48() を呼ぶと、前述の ac の標準値が再び設定される。

準拠

SVr4, POSIX.1-2001.

注意

SVID 3 ではこれらの関数は時代遅れと宣言されている。 SVID 3 では rand(3) が代わりに使用されるべきだと記述されている。

関連項目

rand(3), random(3)

この文書について

この man ページは Linux man-pages プロジェクトのリリース 3.51 の一部である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。
2007-07-26