码迷,mamicode.com
首页 > 其他好文 > 详细

Math.random()的值有没有可能是0或1?

时间:2015-01-20 15:14:12      阅读:408      评论:0      收藏:0      [点我收藏+]

标签:

查阅w3school,得到的答案是:Math.random()返回 0 到 1 之间的随机数,即(0,1)。

查阅MDN(Mozilla开发者网络),得到的解释是:Math.random()返回大于等于0,小于1的随机数,即[0,1)。

而实际上呢?我们来做个试验:循环利用Math.random()生成一百万个随机数,统计其中0出现的次数

var m = 0,
    n = 1000000;
for (var i = 0; i < n; i++) {
    Math.random()===0 ? m++ : "";
};
console.info("0出现的次数是:"+m+"次");

输出结果是:
0出现的次数是:0次

0次,是循环的次数太少了吗?那么将循环次数改为1亿次吧

输出结果是: 
0出现的次数是:0次

结果还是0次!多次试验都是0次,0从未出现过。从这一点看来,w3school的解释似乎更符合实际。

Math.random()还有一个有趣的现象:

我们知道可以利用Math.random()来返回两个整数之间的一个随机数(包括这两个整数本身),比如返回1~10之间的随机整数,理论上1-10每个数字出现的概率都是10%,但事实上我发现1和10出现的概率大约是其它数字出现概率的一半!所以用Math.random()来生成随机数做的抽奖程序是不公平的。

for (var i = 0; i < 10; i++) {
    ~function(){
        var x = i+1,
            m = 0,
            n = 1000000;
        for (var j = 0; j < n; j++) {
            Math.round((Math.random())*9+1)===x ? m++ : "";
        };
        console.info(x+"出现的次数是:"+m+"次","概率:"+m/n*100+"%");
    }(i)
};

输出:

1出现的次数是:55587次 概率:5.5587%
2出现的次数是:111062次 概率:11.1062%
3出现的次数是:110879次 概率:11.08790
4出现的次数是:111146次 概率:11.1146%
5出现的次数是:110554次 概率:11.0554%
6出现的次数是:111610次 概率:11.161%
7出现的次数是:111345次 概率:11.1345%
8出现的次数是:110724次 概率:11.0724%
9出现的次数是:110450次 概率:11.045%
10出现的次数是:55560次 概率:5.556%

 

By 王美建 from http://www.cnblogs.com/wangmeijian/p/4235907.html

转载请保留署名及出处

Math.random()的值有没有可能是0或1?

标签:

原文地址:http://www.cnblogs.com/wangmeijian/p/4235907.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!