这个随机数的C代码如何工作?

时间:2015-02-08 01:44:39

标签: c

我正在使用蒙特卡罗模拟,我需要用C语言理解这个功能。我希望有人知道如何解释这种做法。谢谢。 //函数即gen随机数

        #include <stdlib.h>
        #define MBIG 1000000000
        #define MSEED 161803398
        #define MZ 0
        #define FAC (1.0/MBIG)

        double ran3(long *idum)
        {
          static int inext,inextp;
          static long ma[56];
          static int iff=0;
          long mj,mk;
          int i,ii,k;

          if (*idum < 0 || iff == 0){
              iff=1;
              mj = labs(MSEED-labs(*idum));
              mj %= MBIG;
              ma[55]=mj;
              mk=1;
              for (i=1;i<=54;i++){
                  ii=(21*i) % 55;
                  ma[ii]=mk;
                  mk=mj-mk;
                  if (mk < MZ) mk += MBIG;
                  mj =ma[ii];
              }
              for (k=1;k<=4;k++)
                  for (i=1;i<=55;i++) {
                      ma[i] -= ma[1+(i+30) % 55];
                      if (ma[i] < MZ) ma[i] += MBIG;
                  }
              inext=0;
              inext=31;
              *idum=1;
          }
          if (++inext == 56) inext=1;
          if (++inextp == 56) inextp=1;
          mj =ma[inext]-ma[inextp];
          if (mj < MZ) mj += MBIG;
          ma[inext] =mj;
          return mj*FAC;
        }

1 个答案:

答案 0 :(得分:1)

该函数来自Numerical Recipes in C,第7章,随机数。你会找到最好的解释。