疑似乱数発生(RAND)
RAND1関数, RANDG関数
1.機 能
・rand1 ルーチン(関数)は,-1. から +1. の範囲の一様乱数を得る.C言語の疑似
乱数発生ライブラリ関数 drand48() が,0 〜 1 の範囲の乱数を与えるので,本ル
ーチンでは,これを 2倍したものから 1. を減算するだけである.
・randg ルーチン(関数)は,平均が 0. で,分散(σ)が 1. の正規(ガウス)乱数
を得る.
2.呼出し手順と引数
rv1 = rand1()
rv1 [float] -1. から +1. の範囲の一様乱数の値を得る..
rvg = randg()
rvg [float] 平均が 0. で,分散が 1. の正規乱数の値を得る.
3.ソースプログラム(C言語)
#include <stdlib.h>
#include <math.h>
double rand1(void) { return(drand48()*2.-1.); }
double randg(void) /* after Box-Muller method */
{ static int k=0;
static double u, v, r, f;
while (k == 0) {
u = rand1(); v = rand1(); r = u*u+v*v;
if ((r<1.) && (r>0.))
{ f = sqrt(-2.*log(r)/r); k = 1; return(u*f); }
}
k = 0; return(v*f);
}
float rand1_(void) { return((float)rand1()); }
float randg_(void) { return((float)randg()); }