Man page - random(3)

Packages contains this manual

Available languages:

en fr pl ja ru ro de

Manual

RANDOM

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

名 前

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) を 参 照 。

Image grohtml-32882-1.png

準 拠

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/ に 書 か れ て い る 。