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.数组在这个问题中的重要作用

  • 相关阅读:
    2019年年终总结
    [转]网络基本功08-细说TCP滑动窗口
    anaconda启动报错-pythonw.exe
    FRP+WoL实现远程开机+远程桌面
    [转]网络基本功06-链路聚合
    我的效率工具分享
    比海飞丝更柔顺的写作体验
    阿里云加Picgo或MPic搭建最豪横的图床
    markdown从入门到放弃word和PDF
    Pocket+Evernote 打造个人知识库体系
  • 原文地址:https://www.cnblogs.com/A_ming/p/1710837.html
Copyright © 2011-2022 走看看