zoukankan      html  css  js  c++  java
  • 验证Math.random()函数产生的是均匀分布的数值

    思想:

    Math.random()产生50000(MAX尽量多)个随机数,都将之转换为0---99(n=100)内的整数,然后查看分别查看1,2,3.。。。。99的每个数的个数是多少,是否接近 "MAX/n" 个即可。

    代码:

     1 public class randomR
     2 {    
     3     /**
     4      * 验证Math.random()函数产生的是均匀分布的数值
     5      * @param MAX  产生多少个随机数,越多越好,越多的话数值表现的越明显
     6      * @param n    产生的随即数是在0--n之间的整数的个数,n值最好取值为100,这里以100为例
     7      * @return     数组,存放了从0--n之间的每个整数的个数,用来分析用的。
     8      */
     9        public static int[] isRandom(int MAX,int n)
    10     {
    11         int[] list = new int[n];  //存储数值的
    12         for(int k = 0 ; k < n; k++)
    13             list[k]=0;
    14         
    15         for(int i = 0 ; i < MAX ; i++)
    16         {
    17             double d = n * Math.random();  //  0.0 < d < 100.0
    18             d = Math.floor(d);            //  0.0 <= d <=99.0
    19             long l = Math.round(d);       //    0 <  l  < 99
    20             int j = (int)l;               //    0 <  j  < 99
    21             ++list[j];                    //重要地方,用数组统计个数    
    22         }
    23        return list;
    24     }
    25 
    26         // 打印函数
    27     public static void print(int b[])
    28     {
    29          for(int i=0; i<b.length ; i++)
    30          {
    31             System.out.print(b[i] + (i%10 ==9 ? "\n":"\t"));  //每行打印10个,每个字符之间一个制表符的距离
    32          }
    33     }
    34 
    35         //主函数
    36         public static void main(String args[])
    37         {
    38                 int a[] = isRandom(50000,100); 
    39                 print(a);
    40         }
    41 }
    42 

    输出结果:

     1 521    494    511    495    473    493    508    514    498    466
     2 513    504    507    492    471    440    483    500    480    489
     3 472    509    508    498    471    489    514    536    489    501
     4 513    515    509    424    484    511    475    517    530    530
     5 515    468    505    545    546    480    513    500    511    476
     6 517    489    498    477    481    525    487    498    513    533
     7 480    526    570    494    480    479    472    536    463    507
     8 519    529    496    521    487    491    540    485    511    514
     9 523    444    510    528    494    488    544    505    526    503
    10 499    500    464    486    513    461    505    478    494    511

    从结果中我们可以看出,每一个数都接近50000/100=500,这就证明了Math.random()函数确实产生了均匀分布的随即数。这个问题我们应该掌握两点:

    1.解决问题的思想

    2.数组在这个问题中的重要作用

  • 相关阅读:
    wireShark 代码分析
    Flex Chart / Charting 图表参考
    Boost笔记
    mysql的常用开发工具【建模、维护、监控】
    DSL应用集成和Rhino 3
    元编程 Metaprogramming
    Coffeescript的使用简要
    Ruby基础[Programing ruby笔记]
    编程范式/范型参考 programming paradigm
    DSL语法、组成 2
  • 原文地址:https://www.cnblogs.com/A_ming/p/1710837.html
Copyright © 2011-2022 走看看