RANDOM

Section: Linux Programmer's Manual (3)
Updated: 2020-11-01
Index JM Home Page
 

名前

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

書式

#include <stdlib.h>

long random(void);

void srandom(unsigned seed);

char *initstate(unsigned seed, char *state, size_t n);

char *setstate(char *state);

glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照):

random(), srandom(), initstate(), setstate():

_XOPEN_SOURCE >= 500
    || /* Glibc since 2.19: */ _DEFAULT_SOURCE
    || /* Glibc versions <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE
 

説明

random() 関数は、非線形加法フィードバックを用いた乱数生成関数である。 この関数は、0 から 2^31 - 1 までの疑似乱数を返す。 そのために 31 個のロング整数からなるデフォルトの表を使用する。 この乱数を生成する関数の周期はとても長く、およそ 16 * ((2^31) - 1) である。

srandom() 関数は、 random() で返される疑似乱数整数系列の種を設定する。 そのためには新しい種を引数にして srandom() を呼べばよい。 random() で生成される系列は、 引数に同じ種の値を用いて srandom() を呼ぶことで再現可能である。 種の値が与えられない場合には random() 関数は、自動的に 1 を種に設定する。

The initstate() function allows a state array state to be initialized for use by random(). The size of the state array n is used by initstate() to decide how sophisticated a random number generator it should use---the larger the state array, the better the random numbers will be. Current "optimal" values for the size of the state array n are 8, 32, 64, 128, and 256 bytes; other amounts will be rounded down to the nearest known amount. Using less than 8 bytes results in an error. seed is the seed for the initialization, which specifies a starting point for the random number sequence, and provides for restarting at the same point.

setstate() 関数は、 random() で使用される状態配列を変更する。 状態配列 state は、 initstate() または setstate() が 次に呼び出されるまで、乱数の生成に使用される。 state は initstate() を用いて最初に初期化されているか、 以前に呼び出した setstate() の結果でなければならない。  

返り値

関数 random() と rand_r() は 0 以上 (2^31) - 1 以下の数を返す。関数 srandom() は値を返さない。

関数 initstate() は、変更前の状態配列へのポインターを返す。エラーの場合、 errno に原因を示す値が設定される。

関数 setstate() は、成功すると 0 を返す。 エラーの場合、-1 を返し、 errno にエラーの原因を示す値が設定される。  

エラー

EINVAL
setstate() の引数 state が NULL であった。
EINVAL
initstate() で8バイトよりも小さい状態配列を指定した。
 

属性

この節で使用されている用語の説明については、 attributes(7) を参照。
インターフェース 属性 値
random(), srandom(),
initstate(), setstate()
Thread safety MT-Safe
 

準拠

POSIX.1-2001, POSIX.1-2008, 4.3BSD.  

注意

The random() function should not be used in multithreaded programs where reproducible behavior is required. Use random_r(3) for that purpose.

乱数の生成は複雑な話題である。 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 ではない。  

関連項目

getrandom(2), drand48(3), rand(3), random_r(3), srand(3)  

この文書について

この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。

関連キーワード

乱数   random   state   size   srandom   initstate   setstate   疑似   整数   系列   used   number   bytes   point   原因   話題   William   Press   実用的   議論   stdlib   検査   マクロ   要件   macros

Linux マニュアル 一覧

関連するコマンド・関数

initstate.3   setstate.3   srandom.3   rand.3   rand_r.3   srand.3
 

Index

名前
書式
説明
返り値
エラー
属性
準拠
注意
バグ
関連項目
この文書について

This document was created by man2html, using the manual pages.
Time: 04:39:27 GMT, October 11, 2026