DRAND48

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

名前

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

書式

#include <stdlib.h>

double drand48(void);

double erand48(unsigned short xsubi[3]);

long lrand48(void);

long nrand48(unsigned short xsubi[3]);

long mrand48(void);

long jrand48(unsigned short xsubi[3]);

void srand48(long seedval);

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

void lcong48(unsigned short param[7]);

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

All functions shown above: _XOPEN_SOURCE
    || /* Glibc since 2.19: */ _DEFAULT_SOURCE
    || /* Glibc versions <= 2.19: */ _SVID_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() が呼ばれていない場合、a と c は以下の式で与えられる。

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() を呼ぶと、前述の a と c の 標準値が再び設定される。  

属性

この節で使用されている用語の説明については、 attributes(7) を参照。
インターフェース 属性 値
drand48(), erand48(), lrand48(), nrand48(), mrand48(), jrand48(), srand48(), seed48(), lcong48() Thread safety MT-Unsafe race:drand48

上記の関数は、 乱数生成に使用する状態情報をグローバルに保持する。 そのため、 これらの関数はスレッドセーフではない。  

準拠

POSIX.1-2001, POSIX.1-2008, SVr4.  

関連項目

rand(3), random(3)  

この文書について

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

関連キーワード

ビット   初期化   short   整数   分布   drand   乱数   区間   バッファー   erand   lrand   nrand   mrand   jrand   srand   seed   lcong   疑似   線形   合同   演算   ロング   計算   上位   コピー

Linux マニュアル 一覧

関連するコマンド・関数

drand48.3   jrand48.3   lcong48.3   lrand48.3   mrand48.3   nrand48.3
 

Index

名前
書式
説明
属性
準拠
関連項目
この文書について

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