aboutsummaryrefslogblamecommitdiff
path: root/ja_JP.eucJP/man/man3/random.3
blob: b116d60b77a34d7fe3a7974c34504f015bd1fbc1 (plain) (tree)
































                                                                              
             




































































































































                                                                          
.\" Copyright (c) 1983, 1991, 1993
.\"	The Regents of the University of California.  All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\"    notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\"    notice, this list of conditions and the following disclaimer in the
.\"    documentation and/or other materials provided with the distribution.
.\" 3. All advertising materials mentioning features or use of this software
.\"    must display the following acknowledgement:
.\"	This product includes software developed by the University of
.\"	California, Berkeley and its contributors.
.\" 4. Neither the name of the University nor the names of its contributors
.\"    may be used to endorse or promote products derived from this software
.\"    without specific prior written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\"     @(#)random.3	8.1 (Berkeley) 6/4/93
.\"
.\" $FreeBSD$
.Dd June 4, 1993
.Dt RANDOM 3
.Os BSD 4.2
.Sh 名称
.Nm random ,
.Nm srandom ,
.Nm srandomdev ,
.Nm initstate ,
.Nm setstate
.Nd 優れた乱数ジェネレータ、およびジェネレータを変更するルーチン
.Sh 書式
.Fd #include <stdlib.h>
.Ft long 
.Fn random void
.Ft void
.Fn srandom "unsigned long seed"
.Ft void
.Fn srandomdev void
.Ft char *
.Fn initstate "unsigned long seed" "char *state" "long n"
.Ft char *
.Fn setstate "char *state"
.Sh 解説
.Fn random
関数は、非線形加法フィードバック乱数ジェネレータを使用し、サイズが 31
ロング整数のデフォルトテーブルを採用して、0 から
.if t 2\u\s731\s10\d\(mi1
.if n (2**31)\(mi1
までの範囲で連続した疑似乱数を戻します。この乱数ジェネレータの周期は非常に
大きく、約
.if t 16\(mu(2\u\s731\s10\d\(mi1)
.if n 16*((2**31)\(mi1)
です。
.Pp
.Fn random
関数と
.Fn srandom
関数の呼び出しシーケンスと初期化プロパティは、
.Xr rand 3
関数と
.Xr srand 3
関数のものと(だいたい)同じです。しかし、
.Xr rand 3
が作成するランダムシーケンスはかなり劣ります。rand が作成する下位 10
ビットは、循環パターンになります。
.Fn random
が作成するビットはすべて使用できます。たとえば
.Sq Li random()&01
では、ランダムなバイナリ値が作成されます。
.Pp
.Xr rand 3
と同じように、
.Fn random
は数値のシーケンスをデフォルトで作成します。このシーケンスは、種を
.Ql 1
にして
.Fn srandom
を呼び出すと複写できます。
.Pp
.Fn srandomdev
ルーチンは、暗号化での使用に適した乱数を戻す
.Xr urandom 4
乱数デバイスを使用し、状態配列を初期化します。種を作成するこのプロシージャ
は、どのような値で
.Fn srandom
を呼び出しても再作成できない状態を作成することに注意してください。状態
バッファの後の条件は、固定種に適用される LC アルゴリズムで引き出せない
からです。 
.Pp
.Fn initstate
ルーチンでは、引数として渡された状態配列を後で使用するときのために初期
化できます。 
.Fn initstate
は状態配列のサイズ(バイト単位)を使用し、乱数ジェネレータの複雑さを決め
ます。状態を大きくすると、乱数の質は上がります。(現在のところ、状態情
報の量に「最適」な値は、8バイト、32バイト、64バイト、128バイト、256 バ
イトです。その他の値は、最も近い値に切り下げられます。8 バイトより小さ
い値を使用するとエラーとなります。)初期化の種(乱数シーケンスの開始点を
指定し、同じ点から再開できる)も引数です。
.Fn initstate
関数は、以前の状態情報配列のポインタを戻します。
.Pp
状態を初期化したら、
.Fn setstate
ルーチンで状態を素早く切り替えられます。
.Fn setstate
関数は、以前の状態配列のポインタを戻します。引数である状態配列は、次に
.Fn initstate
か
.Fn setstate
を呼び出すまで、さらに乱数を作成する場合に使用されます。
.Pp
状態配列を初期化したら、
.Fn initstate
を(目的の種、状態配列、サイズで)呼び出すか、状態配列を指定した
.Fn setstate
と目的の種を指定した
.Fn srandom
の両方を呼び出すことで、異なる点から再開できます。
.Fn setstate
と
.Fn srandom
の両方を呼び出すと、状態配列のサイズを初期化した後で記憶する必要がない
という長所が得られます。
.Pp
状態情報を 256バイトにすると、乱数ジェネレータの周期は
.if t 2\u\s769\s10\d
.if n 2**69
より大きくなります。この周期では、ほとんどの目的に十分に対応できます。
.Sh 作者
.An Earl T. Cohen
.Sh 診断
状態情報を 8バイトより小さくして
.Fn initstate
を呼び出したり、状態情報が歪められたことを
.Fn setstate
が検出したりすると、エラーメッセージが標準エラー出力に出力されます。
.Sh 関連項目
.Xr rand 3 ,
.Xr srand 3 ,
.Xr urandom 4
.Sh 歴史
この関数は、
.Bx 4.2
に追加されました。
.Sh バグ
処理速度は、
.Xr rand 3
の約 2/3 です。
.Pp
古いシステムは種の作成が非常に弱く、ランダムシーケンスは種とあまり
変わりませんでした。現在のシステムは、より良い疑似乱数ジェネレータを
初期状態の算出に採用しています。