嘿,有没有一种方法可以选择均匀分布的随机数?我使用了这个函数
Math.floor(Math.random()*2)
该函数返回1或0。然而,我认为它并没有完全50%的机会产生其中任何一个结果。有更好的想法吗?谢谢。
嘿,有没有一种方法可以选择均匀分布的随机数?我使用了这个函数
Math.floor(Math.random()*2)
该函数返回1或0。然而,我认为它并没有完全50%的机会产生其中任何一个结果。有更好的想法吗?谢谢。
<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>
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);
试一试:
<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。
它以相等的概率生成0或1。
但是为什么你没有使用:
Math.round(Math.random())
你想要能够改变生成 0、1、2、...、N 吗?如果是的话,请保留你的实现。
这个比例已经接近50%,如果你担心有差异(如果确实存在),那么你首先就不会使用伪随机数 :-)
运行1000万次循环,得到的比率是5000931:4999069,误差仅为万分之一(0.00931%)。
两种结果的机会完全相等。你为什么认为它不是呢?
Math.random() * 2
返回一个介于0到1.99之间的数字;向下取整将为0赋值于0-0.99之间的数值,而为1赋值于1-1.99之间的数值,因此它相当均匀。但我担心有人有更好的想法。 - Salman A