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

名前
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() が 次に呼び出されるまで、乱数の生成に使用される。 state は initstate() を用いて最初に初期化
されているか、 以前に呼び出した 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/ に書かれている。
GNU 2020-11-01 RANDOM(3)