疑似乱数発生(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()); }