均匀分布的随机数

时间:2011-04-19 11:44:53

标签: javascript random

嘿,有没有办法选择均匀分布的随机数?我用过这个功能

Math.floor(Math.random()*2)

返回1或0.但是,我不认为它有50%的机会产生任何一个。更好的想法?谢谢

6 个答案:

答案 0 :(得分:5)

如果您不相信,请检查:

<script type="text/javascript">
var total = 0;
var ones = 0;
for (var i = 0; i < 100000; i++, total++) {
  ones += Math.floor(Math.random()*2);
}
alert(ones/total);
</script>

这段代码给了我0.49972 - 非常接近50%。

答案 1 :(得分:4)

它应该给你均匀分配。

var a=new Array(0,0); for (i=0; i<100000; i++) a[Math.floor(Math.random() * 2)]++; alert(a);

您可以通过复制粘贴到地址栏来尝试:

javascript:var a=new Array(0,0); for (i=0; i<100000; i++) a[Math.floor(Math.random() * 2)]++; alert(a);

答案 2 :(得分:3)

试一试:

<script type="text/javascript">

var zero=0;
var one=0;

for (var i=0;i<1000000;i++)
{
    var num=Math.floor(Math.random()*2)
    if (num) zero++;
    if (!num) one++;
}

document.write("Zero: "+zero+"<br />");
document.write("One: "+one+"<br />");

</script>

你正在寻找这种情况下的答案,这些答案在一百万的平方根范围内是好的。即如果你得到真正随机的数字,你希望结果是500,000 + - 1000。

答案 3 :(得分:1)

它足够接近50%,如果你担心差异(如果确实存在差异),你首先不会使用伪随机数: - )

运行一个包含1000万次迭代的循环,我得到的比率为5,000,931到4,999,069,这个错误只有万分之一(0.00931%)。

答案 4 :(得分:0)

它产生0或1的机会相等。

但你为什么不用:

Math.round(Math.random())

?您是否希望能够更改为生成0,1,2,...,N?如果是这样,请继续执行。

答案 5 :(得分:0)

任何一个结果的机会恰好是50%。是什么让你觉得它不是?