荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Version (Who makes history and why), 信区: Program
标  题:  贴几个生成随机数的函数(4)
发信站: 荔园晨风BBS站 (Tue Mar 25 18:09:41 2003), 站内信件

#define MBIG 1000000000
#define MSEED 161803398
#define MZ 0
#define FAC (1.0/MBIG)
float 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=MSEED-(*idum < 0 ? -*idum : *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;
  inextp=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;
}
#undef MBIG
    ma[i] -= ma[1+(i+30) % 55];
    if (ma[i] < MZ) ma[i] += MBIG;
   }
  inext=0;
  inextp=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;
}
#undef MBIG
#undef MSEED
#undef MZ
#undef FAC


--
                      *
          *                                  *
                          *             *
                      no more to say
                  ★     just wish you   ★
                            good luck

※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.1.50]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店