Manpages

名 前

drand48, erand48, lrand48, nrand48, mrand48, jrand48, srand48, seed48, lcong48 − 一 様 分 布 す る 疑 似 乱 数 を 生 成 す る 関 数

書 式

#include <stdlib.h>

double drand48(void);

double erand48(unsigned short xsubi[3]);

long int lrand48(void);

long int nrand48(unsigned short xsubi[3]);

long int mrand48(void);

long int jrand48(unsigned short xsubi[3]);

void srand48(long int seedval);

unsigned short *seed48(unsigned short seed16v[3]);

void lcong48(unsigned short param[7]);

glibc 向 け の 機 能 検 査 マ ク ロ の 要 件 (feature_test_macros(7) 参 照 ): 上 記 の 全 て の 関 数 : _SVID_SOURCE || _XOPEN_SOURCE

説 明

こ れ ら の 関 数 は 線 形 合 同 ア ル ゴ リ ズ ム と 48ビ ッ ト 整 数 演 算 を 用 い て 疑 似 乱 数 を 生 成 す る 。 関 数 drand48() と erand48() は 、 区 間 [0.0, 1.0) で 一 様 分 布 す る 非 負 の 倍 精 度 浮 動 小 数 点 実 数 値 を 返 す 。 関 数 lrand48() と nrand48() は 0 と 2^31 の 間 で 一 様 分 布 す る 非 負 の ロ ン グ 整 数 を 返 す 。 関 数 mrand48() と jrand48() は −2^31 と 2^31 の 間 で 一 様 分 布 す る 符 号 付 き ロ ン グ 整 数 を 返 す 。 関 数 srand48(), seed48(), lcong48() は 初 期 化 関 数 で あ る 。 関 数 drand48(), lrand48(), mrand48() を 使 用 す る 前 に 、 こ れ ら の 初 期 化 関 数 の い ず れ か を 呼 ぶ べ き で あ る 。 関 数 erand48(), nrand48(), jrand48() は 初 め に 初 期 化 関 数 を 呼 ぶ こ と を 必 要 と し な い 。 こ こ で 説 明 し て い る す べ て の 関 数 は 48ビ ッ ト の 整 数 の シ ー ケ ン ス (Xi) を 生 成 す る こ と で 機 能 し て い る 。 生 成 方 法 は 以 下 の 線 形 合 同 の 式 に よ る 。

Xn+1 = (aXn + c) mod m, こ こ でn >= 0 で あ る 。 パ ラ メ ー タ ー が m = 2^48 で あ る た め 、 48ビ ッ ト 整 数 演 算 が 行 わ れ て い る 。 lcong48() が 呼 ば れ て い な い 場 合 、 ac は 以 下 の 式 で 与 え ら れ る 。

a = 0x5DEECE66D
c = 0xB
関 数drand48(), erand48(), lrand48(), nrand48(), mrand48(), jrand48() で 返 さ れ る 値 は 次 の よ う に し て 計 算 さ れ る 。 は じ め に 、 次 の 48ビ ッ ト の Xi が 計 算 さ れ る 。 そ し て 、 返 す べ き デ ー タ の 型 に 依 存 し た 適 切 な ビ ッ ト 数 が Xi の 上 位 ビ ッ ト か ら コ ピ ー さ れ る 。 最 後 に 、 こ の 値 を 返 り 値 に 変 換 す る 。 関 数 drand48(), lrand48(), mrand48() は 最 後 に 生 成 さ れ た 48ビ ッ ト の Xi を 内 部 バ ッ フ ァ ー に 格 納 す る 。 配 列 の 形 の 引 数 xsubi に 個 々 の Xi の 値 を 格 納 で き る よ う な 領 域 を 確 保 す る こ と を 、 関 数 erand48(), nrand48(), jrand48() は 、 呼 び 出 し 側 の プ ロ グ ラ ム に 要 求 す る 。 こ れ ら の 関 数 は 、 は じ め て そ れ ら の 関 数 を 呼 ぶ 前 に Xi の 初 期 値 を 配 列 に 代 入 す る こ と で 初 期 化 さ れ る 。 初 期 化 関 数 srand48() は 、 Xi の 上 位 32ビ ッ ト を 引 数 seedval に 設 定 す る 。 下 位 の 16ビ ッ ト は 、 適 当 に 決 め ら れ た 値 で あ る 0x330Eに 設 定 さ れ る 。 初 期 化 関 数 seed48() は 、 Xi の 値 を 、 配 列 の 形 を し た 引 数 で あ る seed16v の 中 で 指 定 さ れ た 48ビ ッ ト の 値 に 設 定 す る 。 Xi の 前 の 値 は 内 部 バ ッ フ ァ ー に コ ピ ー さ れ 、 こ の バ ッ フ ァ ー へ の ポ イ ン タ ー が seed48() に よ っ て 返 さ れ る 。 初 期 化 関 数 lcong48() は 使 用 者 が Xi, a, c の 初 期 値 を 指 定 す る た め の 関 数 で あ る 。 配 列 の 形 を し た 引 数 の 要 素 は そ れ ぞ れ 、 param[0−2]Xi を 、 param[3−5]a を 、 param[6]c を 指 定 す る も の で あ る 。 lcong48() が 呼 ば れ た 後 で 、 srand48() か seed48() を 呼 ぶ と 、 前 述 の ac の 標 準 値 が 再 び 設 定 さ れ る 。

属 性

マ ル チ ス レ ッ デ ィ ン グ (pthreads(7) 参 照 ) 関 数 drand48(), erand48(), lrand48(), nrand48(), mrand48(), jrand48(), srand48(), seed48(), lcong48() は 、 乱 数 生 成 に 使 用 す る 状 態 情 報 を グ ロ ー バ ル に 保 持 す る 。 そ の た め 、 こ れ ら の 関 数 は ス レ ッ ド セ ー フ で は な い 。

準 拠

SVr4, POSIX.1−2001.

関 連 項 目

rand(3), random(3)

こ の 文 書 に つ い て

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