Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all bug

名前

       random, srandom, initstate, setstate - 乱数を生成する関数

書式

       #include <stdlib.h>

       long random(void);

       void srandom(unsigned seed);

       char *initstate(unsigned seed, char *state, size_t n);

       char *setstate(char *state);

   glibc 向けの機能検査マクロの要件 (feature_test_macros(7)  参照):

       random(), srandom(), initstate(), setstate():
           _XOPEN_SOURCE >= 500
               || /* Glibc since 2.19: */ _DEFAULT_SOURCE
               || /* Glibc versions <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE

説明

       random()   関数は、非線形加法フィードバックを用いた乱数生成関数である。 この関数は、0 から
       2^31 - 1 までの疑似乱数を返す。 そのために 31 個のロング整数からなるデフォルトの表を使用す
       る。 この乱数を生成する関数の周期はとても長く、およそ 16 * ((2^31) - 1) である。

       srandom()   関数は、 random()  で返される疑似乱数整数系列の種を設定する。 そのためには新し
       い種を引数にして srandom()  を呼べばよい。 random()  で生成される系列は、 引数に同じ種の値
       を用いて  srandom() を呼ぶことで再現可能である。 種の値が与えられない場合には random()  関
       数は、自動的に 1 を種に設定する。

       The initstate()  function allows a  state  array  state  to  be  initialized  for  use  by
       random().   The  size  of  the  state  array  n  is  used  by  initstate()   to decide how
       sophisticated a random number generator it should use—the  larger  the  state  array,  the
       better  the  random  numbers  will be.  Current "optimal" values for the size of the state
       array n are 8, 32, 64, 128, and 256 bytes; other amounts  will  be  rounded  down  to  the
       nearest  known amount.  Using less than 8 bytes results in an error.  seed is the seed for
       the initialization, which specifies a starting point for the random number  sequence,  and
       provides for restarting at the same point.

       setstate()    関数は、  random()   で使用される状態配列を変更する。  状態配列  state  は、
       initstate()  または setstate()  が 次に呼び出されるまで、乱数の生成に使用される。 stateinitstate()   を用いて最初に初期化されているか、 以前に呼び出した setstate()  の結果でなけ
       ればならない。

返り値

       関数 random() と rand_r() は 0 以上 (2^31) - 1 以下の数を返す。関数 srandom() は値を返さな
       い。

       関数 initstate() は、変更前の状態配列へのポインターを返す。エラーの場合、 errno に原因を示
       す値が設定される。

       関数 setstate() は、成功すると 0 を返す。 エラーの場合、-1 を返し、 errno にエラーの原因を
       示す値が設定される。

エラー

       EINVAL setstate() の引数 state が NULL であった。

       EINVAL initstate()  で8バイトよりも小さい状態配列を指定した。

属性

       この節で使用されている用語の説明については、 attributes(7) を参照。

       ┌────────────────────────┬───────────────┬─────────┐
       │インターフェース属性      │
       ├────────────────────────┼───────────────┼─────────┤
       │random(), srandom(),    │ Thread safety │ MT-Safe │
       │initstate(), setstate() │               │         │
       └────────────────────────┴───────────────┴─────────┘

準拠

       POSIX.1-2001, POSIX.1-2008, 4.3BSD.

注意

       The  random()   function  should  not be used in multithreaded programs where reproducible
       behavior is required.  Use random_r(3)  for that purpose.

       乱数の生成は複雑な話題である。 Numerical Recipes in C: The  Art  of  Scientific  Computing
       (William  H. Press, Brian P. Flannery, Saul A. Teukolsky, William T. Vetterling; New York:
       Cambridge University Press, 2007, 3rd ed.)  では実用的な乱数生成を論点とした優れた議論が第
       7 章 (乱数) で展開されている。

       より理論的な議論については  Donald  E.  Knuth の The Art of Computer Programming, volume 2
       (Seminumerical Algorithms), 2nd ed.;  Reading,  Massachusetts:  Addison-Wesley  Publishing
       Company, 1981 の第 3 章 (乱数) を見よ。ここでは、 たくさんの実用的な話題についても深く網羅
       されている。

バグ

       POSIX では、エラー時に initstate() は NULL を返すべきとされている。  glibc  の実装では、エ
       ラー時に errno は仕様通りに設定されるが、関数の返り値は NULL ではない。

関連項目

       getrandom(2), drand48(3), rand(3), random_r(3), srand(3)

この文書について

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