C#如何产生散列性比较好的随机数序列?时间用多一些都可以~~

解决方案 »

  1.   

    public class GaussianRNG
      {
        int iset;
        double gset;
        Random r1, r2;
        
        public GaussianRNG()
        {
          r1 = new Random(unchecked((int)DateTime.Now.Ticks));
          r2 = new Random(~unchecked((int)DateTime.Now.Ticks));
          iset = 0;
        }
        
        public double Next()
        {
          double fac, rsq, v1, v2;    
          if (iset == 0) {
            do {
              v1 = 2.0 * r1.NextDouble() - 1.0;
              v2 = 2.0 * r2.NextDouble() - 1.0;
              rsq = v1*v1 + v2*v2;
            } while (rsq >= 1.0 || rsq == 0.0);
            
            fac = Math.Sqrt(-2.0*Math.Log(rsq)/rsq);
            gset = v1*fac;
            iset = 1;
            return v2*fac;
          } else {
            iset = 0;
            return gset;
          }
        }
      }