Provided by: manpages-ja-dev_0.5.0.0.20131015+dfsg-2_all
名前
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() が呼ばれていない場合、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 の 標準値が再び設定される。
属性
マルチスレッディング (pthreads(7) 参照) 関数 drand48(), erand48(), lrand48(), nrand48(), mrand48(), jrand48(), srand48(), seed48(), lcong48() は、 乱数生成に使用する状態情報をグローバルに保持する。 そのため、 こ れらの関数はスレッドセーフではない。
準拠
SVr4, POSIX.1-2001.
注意
SVID 3 ではこれらの関数は時代遅れと宣言されている。 SVID 3 では rand(3) が代わりに使用さ れるべきだと記述されている。
関連項目
rand(3), random(3)
この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.54 の一部 である。プロジェクト の説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。 2013-06-21 DRAND48(3)