Provided by: manpages-ja-dev_0.5.0.0.20140515+dfsg-2_all
名前
random, srandom, initstate, setstate - 乱数を生成する関数
書式
#include <stdlib.h> long int random(void); void srandom(unsigned int seed); char *initstate(unsigned int seed, char *state, size_t n); char *setstate(char *state); glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照): random(), srandom(), initstate(), setstate(): _SVID_SOURCE || _BSD_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
説明
random() 関数は、非線形加法フィードバックを用いた乱数生成関数である。 この関数は、0 から RAND_MAX までの疑似乱数を返す。 そのために 31 個のロング整数からなるデフォルトの表を使用す る。 この乱数を生成する関数の周期はとても長く、およそ 16 * ((2^31) - 1) である。 srandom() 関数は、 random() で返される疑似乱数整数系列の種を設定する。 そのためには新し い種を引数にして srandom() を呼べばよい。 random() で生成される系列は、 引数に同じ種の値 を用いて srandom() を呼ぶことで再現可能である。 種の値が与えられない場合には random() 関 数は、自動的に 1 を種に設定する。 initstate() 関数は、 random() で使用される状態配列 state を初期化する。 initstate() で は、状態配列の大きさ n は 使用する関数の乱数生成の性能の程度を決定するために使用される — 状態配列が大きい程、乱数の性能はよくなる。 seed は初期化のための種である。 これは乱数系列 の開始位置を決定するものであり、 この値を指定することで同一の開始位置から乱数の生成を 再開 することができる。 setstate() 関数は、 random() で使用される状態配列を変更する。 状態配列 state は、 initstate() または setstate() が 次に呼び出されるまで、乱数の生成に使用される。 state は initstate() を用いて最初に初期化されているか、 以前に呼び出した setstate() の結果でなけ ればならない。
返り値
関数 random() と rand_r() は 0 以上 RAND_MAX 以下の数を返す。 関数 srandom() は値を返さな い。 関数 initstate() は、変更前の状態配列へのポインタを返す。エラーの場合、 errno に原因を示す 値が設定される。 関数 setstate() は、成功すると 0 を返す。 エラーの場合、-1 を返し、 errno にエラーの原因を 示す値が設定される。
エラー
EINVAL setstate() の引き数 state が NULL であった。 EINVAL initstate() で8バイトよりも小さい状態配列を指定した。
属性
マルチスレッディング (pthreads(7) 参照) 関数 random(), srandom(), initstate(), setstate() はスレッドセーフである。
準拠
4.3BSD, POSIX.1-2001.
注意
状態配列 n の大きさの現在の「最適」値は 8、32、64、128、256 バイトである。 その他の量を指 定した場合には、指定した量を越えない上述の値に 最も近い値になる。 8 バイト未満の量を指定し た場合にはエラーの原因となる。 複数のスレッドが random() を使うような状況では、この関数を使用すべきではない。 その場合に は random_r(3) を使うこと。 乱数の生成は複雑な話題である。 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 ではない。
関連項目
drand48(3), rand(3), random_r(3), srand(3)
この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.65 の一部 である。プロジェクト の説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。