DRAND48(3) DRAND48(3) 名前 drand48, erand48, lrand48, nrand48, mrand48, jrand48, srand48, seed48, lcong48 - 一様分布する疑似乱数を生成する 関数 書式 #include double drand48(void); double erand48(unsigned short int xsubi[3]); long int lrand48(void); long int nrand48(unsigned short int xsubi[3]); long int mrand48(void); long int jrand48(unsigned short int xsubi[3]); void srand48(long int seedval); unsigned short int *seed48(unsignedshortint seed16v [3]); void lcong48(unsigned short int param[7]); 説明 これらの関数は線形合同アルゴリズムと48ビット整数演算を用い て疑似乱数を生成する。 drand48()関数とerand48()関数は、区間[0.0, 1.0)で一様分布す る非負の倍精度浮動小数点実数値を返す。 lrand48()関数とnrand48()関数は0と2^31の間で一様分布する非 負のロング整数を返す。 mrand48()関数とjrand48()関数は-2^31と2^31の間で一様分布す る符号付きロング整数を返す。 srand48()関数seed48()関数そしてlcong48()関数は初期化関数で ある。drand48()関数lrand48()関数またはmrand49()を使用する 前に、これらの初期化関数のいずれかを呼ぶべきである。関数 erand48()、nrand48()そしてjrand48()は初めに初期化関数を呼 ぶことを必要としない。 ここで説明しているすべての関数は48ビットの整数のシーケンス (Xi)を生成することで機能している。生成方法は以下の線形合同 の式による。 Xn+1 = (aXn + c) mod m, ここで n >= 0 である。パラメータがm = 2^48であるため、48ビ ット整数演算が行われている。lcong48()が呼ばれていない場合 、aとcは以下の式で与えられる。 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()を呼ぶと、前述のaとcの標準値が再び設定される。 July 2, 1993 2 DRAND48(3) DRAND48(3) 準拠 SVID 3 注意事項 これらの関数はSVID 3によって時代遅れと宣言されている。 SVID 3はrand(3)が代わりに使用されるべきだと記述している。 関連事項 rand(3), random(3)