Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

rand(3)

RANDOM(3)  —  UNIX Programmer’s Manual

名称

random, srandom, initstate, setstate − より優れた乱数ジェネレータ

形式

long random()

srandom(seed)
int seed;

char ∗initstate(seed, state, n)
unsigned seed;
char ∗state;
int n;

char ∗setstate(state)
char ∗state;

解説

31ビットのロングタイプの整数のデフォルトテーブルを 必要とする非線形加法フィードバック法による乱数ジェネレータを 使用して、 次々と0から 231−1.  の範囲の疑似乱数を 返します。 この乱数ジェネレータの周期は、 非常に大きく、 約 16×(231−1).  です。

random/srandom は、 (たいてい) rand/srand と同じ呼び出し形式と同じ属性の初期値を 持ちます。 両者の相違は、 rand(3) がごく限られた乱数列しか生成しないところです。 つまり、 randで生成する下位12ビットは、 周期的に同じパターンを 繰り返します。 その点、 random で生成するビットはすべて、 有用です。 たとえば、
 “random()&01” は、 任意の2進表記の値を 生成します。

srand と異なり、 srandom は、 古いシード(seed)の値を 返しません。 その理由は、 使用されるスタータス(state)情報のサイズが1ワードよりずっと大きいからです。 (2つの違うルーチンが、 乱数ジェネレータの再スタート処理および変更を 行うために提供されています。 ) rand(3) と同様に、 random はデフォルトで、 引数 seed を値 1 にして srandom を呼び出すことで、 重複する可能性のある数列を生成します。

initstate ルーチンでは、 次の使用に備えて初期設定するために、 引数で state 配列を渡せます。 state 配列のサイズ(バイト単位)は initstate で使用され、 乱数ジェネレータの精度を決定します。 state が大きければ大きい程、 よい乱数が得られます。 (state 情報のサイズに対応する現在の‘最適な’値は、 8、32、64、128 および 256 バイトです。 他のサイズは、 これらに最も近いサイズに切り下げられます。 8 バイトより小さい値を使用すると、 エラーが発生します。) 初期化時の seed (これは、 乱数列の開始点を指定し、 また再開始点を同じ位置に指定します)もまた、 引数です。 initstate は、 以前の state 情報配列を指すポインタを返します。

一度、 state が初期設定されると、 setstate ルーチンによって state 間を 高速に切り替えできます。 また、 satstate は以前の state 配列を 指すポインタを返します。 その引数 state 配列は、 次に initstate あるいは setstate が呼び出されるまで、 さらに乱数を生成するのに使用します。

一度、 state 配列が初期設定されると、 initstate (seed、state 配列とそのサイズを 引数に指定する)の呼び出す場合と、 setstate (state 配列を引数に指定する)と srandom (seed を 引数に指定する)を 両方呼び出す場合では、 異なった点から再開します。 setstate と srandom の両方を呼び出すことの利点は、 state 配列を初期設定した後、 この配列のサイズを記憶しておく必要がないことです。

state 情報のサイズが 256 バイトの場合、 乱数ジェネレータの周期は 269, より大きくなります。 これは、 たいていの使用目的に充分かなうはずです。

著者

Earl T.Cohen

診断

initstate を 8バイトより小さい state 情報で呼び出した場合、 または setstate が state 情報を取り違えていることがわかった場合、 エラーメッセージを標準エラー出力に書き出します。

関連事項

rand(3)

バグ

処理速度は、 rand(3C) の約 2/3 です。

NEWS-OSRelease 3.3

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026