验证Math.random()函数产生的是均匀分布的数值

本文通过生成大量随机数并统计每个数出现的次数,验证了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.数组在这个问题中的重要作用

转载于:https://www.cnblogs.com/A_ming/archive/2010/04/13/1710837.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值