快捷搜索:   nginx

验证Math.random()函数产生的数值

验证Math.random()函数产生的是均匀分布的数值 思想: Math.random()产生50000(MAX尽量多)个随机数,都将之转换为0---99(n=100)内的整数,然后查看分别查看1,2,3.。。。。99的每个数的个数是多少,是否接近 "MAX/n" 个即可。 代码:  
  1. public class randomR  {      
  2.     /**       * 验证Math.random()函数产生的是均匀分布的数值  
  3.      * @param MAX  产生多少个随机数,越多越好,越多的话数值表现的越明显       * @param n    产生的随即数是在0--n之间的整数的个数,n值最好取值为100,这里以100为例  
  4.      * @return     数组,存放了从0--n之间的每个整数的个数,用来分析用的。       */ 
  5.        public static int[] isRandom(int MAX,int n)      {  
  6.         int[] list = new int[n];  //存储数值的          for(int k = 0 ; k < n; k++)  
  7.             list[k]=0;            
  8.         for(int i = 0 ; i < MAX ; i++)          {  
  9.             double d = n * Math.random();  //  0.0 < d < 100.0              d = Math.floor(d);            //  0.0 <= d <=99.0  
  10.             long l = Math.round(d);       //    0 <  l  < 99              int j = (int)l;               //    0 <  j  < 99  
  11.             ++list[j];                    //重要地方,用数组统计个数              }  
  12.        return list;      }  
  13.          // 打印函数  
  14.     public static void print(int b[])      {  
  15.          for(int i=0; i<b.length ; i++)           {  
  16.             System.out.print(b[i] + (i%10 ==9 ? "\n":"\t"));  //每行打印10个,每个字符之间一个制表符的距离           }  
  17.     }   
  18.         //主函数          public static void main(String args[])  
  19.         {                  int a[] = isRandom(50000,100);   
  20.                 print(a);          }  
  21. }  
输出结果:  
  1. 521    494    511    495    473    493    508    514    498    466 513    504    507    492    471    440    483    500    480    489 
  2. 472    509    508    498    471    489    514    536    489    501 513    515    509    424    484    511    475    517    530    530 
  3. 515    468    505    545    546    480    513    500    511    476 517    489    498    477    481    525    487    498    513    533 
  4. 480    526    570    494    480    479    472    536    463    507 519    529    496    521    487    491    540    485    511    514 
  5. 523    444    510    528    494    488    544    505    526    503 499    500    464    486    513    461    505    478    494    511 
从结果中我们可以看出,每一个数都接近50000/100=500,这就证明了Math.random()函数确实产生了均匀分布的随即数。这个问题我们应该掌握两点: 1.解决问题的思想 2.数组在这个问题中的重要作用
顶(1)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论