日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.2-RELEASE-K, 8.0-RELEASE-K は、プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.2-RELEASE-K, 8.0-RELEASE-K は、全翻訳済み)
6.4-STABLE-K, 7.2-STABLE-K, 8.0-STABLE-K は現在、 作成中で日々更新されています。 最新の snapshots を元に作成しています。
RANDOM(3) FreeBSD Library Functions Manual RANDOM(3)
名称
random, srandom, srandomdev, initstate, setstate - 優れた乱数ジェネレー
タ、およびジェネレータを変更するルーチン
書式
#include <stdlib.h>
long
random(void)
void
srandom(unsigned long seed)
void
srandomdev(void)
char *
initstate(unsigned long seed, char *state, long n)
char *
setstate(char *state)
解説
random() 関数は、非線形加法フィードバック乱数ジェネレータを使用し、サイズ
が 31 ロング整数のデフォルトテーブルを採用して、0 から (2**31)-1 までの範
囲で連続した疑似乱数を戻します。この乱数ジェネレータの周期は非常に大き
く、約 16*((2**31)-1) です。
random() 関数と srandom() 関数の呼び出しシーケンスと初期化プロパティは、
rand(3) 関数と srand(3) 関数のものと (だいたい) 同じです。しかし、
rand(3) が作成するランダムシーケンスはかなり劣ります。rand が作成する下位
10 ビットは、循環パターンになります。 random() が作成するビットはすべて使
用できます。たとえば `random()&01' では、ランダムなバイナリ値が作成されま
す。
rand(3) と同じように、 random() は数値のシーケンスをデフォルトで作成しま
す。このシーケンスは、種を `1' にして srandom() を呼び出すと複写できま
す。
srandomdev() ルーチンは、暗号化での使用に適した乱数を戻す urandom(4) 乱数
デバイスを使用し、状態配列を初期化します。種を作成するこのプロシージャ
は、どのような値で srandom() を呼び出しても再作成できない状態を作成するこ
とに注意してください。状態バッファの後の条件は、固定種に適用される LC ア
ルゴリズムで引き出せないからです。
initstate() ルーチンでは、引数として渡された状態配列を後で使用するときの
ために初期化できます。 initstate() は状態配列のサイズ (バイト単位) を使用
し、乱数ジェネレータの複雑さを決めます。状態を大きくすると、乱数の質は上
がります。(現在のところ、状態情報の量に「最適」な値は、8 バイト、32 バイ
ト、64 バイト、128 バイト、256 バイトです。その他の値は、最も近い値に切り
下げられます。8 バイトより小さい値を使用するとエラーとなります。) 初期化
の種 (乱数シーケンスの開始点を指定し、同じ点から再開できる) も引数です。
initstate() 関数は、以前の状態情報配列のポインタを戻します。
状態を初期化したら、 setstate() ルーチンで状態を素早く切り替えられます。
setstate() 関数は、以前の状態配列のポインタを戻します。引数である状態配列
は、次に initstate() か setstate() を呼び出すまで、さらに乱数を作成する場
合に使用されます。
状態配列を初期化したら、 initstate() を (目的の種、状態配列、サイズで) 呼
び出すか、状態配列を指定した setstate() と目的の種を指定した srandom() の
両方を呼び出すことで、異なる点から再開できます。 setstate() と srandom()
の両方を呼び出すと、状態配列のサイズを初期化した後で記憶する必要がないと
いう長所が得られます。
状態情報を 256 バイトにすると、乱数ジェネレータの周期は 2**69 より大きく
なります。この周期では、ほとんどの目的に十分に対応できます。
作者
Earl T. Cohen
診断
状態情報を 8 バイトより小さくして initstate() を呼び出したり、状態情報が
歪められたことを setstate() が検出したりすると、エラーメッセージが標準エ
ラー出力に出力されます。
関連項目
rand(3), srand(3), urandom(4)
歴史
この関数は、 4.2BSD に追加されました。
バグ
処理速度は、 rand(3) の約 2/3 です。
古いシステムは種の作成が非常に弱く、ランダムシーケンスは種とあまり変わり
ませんでした。現在のシステムは、より良い疑似乱数ジェネレータを初期状態の
算出に採用しています。
4.2 Berkeley Distribution June 4, 1993 2