RANDOM(3)

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

書式
#include <stdlib.h>

long int random(void);
void srandom(unsigned int seed);
char *initstate(unsigned int seed, char *state, int n);
char *setstate(char *state);

説明
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()を用いて最初に初期化されていなければならない。

返り値
random()関数は0とRAND_MAXの間の値を返す。 srandom()関数は値を返さない。 initstate()関数とsetstate()関数は 直前の状態配列へのポインタを返す。

エラー

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

注意
状態配列nの大きさの現在の"最適"値は 8、32、64、128、そして256バイトである。 その他の量を指定した場合には、指定した量を越えない上述の値に 最も近い値になる。 8バイト未満の量を指定した場合にはエラーの原因となる。

準拠
BSD 4.3

関連項目
rand(3), srand(3)