Provided by: manpages-ja-dev_0.5.0.0.20140515+dfsg-2_all bug

名前

       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 の 標準値が再び設定される。

属性

   マルチスレッディング (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.65 の一部 である。プロジェクト
       の説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。

                                            2013-06-21                                 DRAND48(3)