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/ に書かれている。