Javascript 均匀分布随机数

Javascript 均匀分布随机数,javascript,random,Javascript,Random,嘿,有没有办法选择均匀分布的随机数?我使用了这个函数 Math.floor(Math.random()*2) 它返回1或0。然而,我不认为它有确切的50%的机会生产任何一个。更好的想法?谢谢它生成0或1,机会均等 但你为什么不使用: Math.round(Math.random()) ??是否要更改以生成0、1、2、…、N?如果是这样的话,请保留您的实现。两种结果的概率都是50%。什么使你认为它不是?它接近50%,如果你担心差异(如果确实存在差异),你就不会首先使用伪随机数:-) 运行一个1

嘿,有没有办法选择均匀分布的随机数?我使用了这个函数

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

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

它生成0或1,机会均等

但你为什么不使用:

Math.round(Math.random())

??是否要更改以生成0、1、2、…、N?如果是这样的话,请保留您的实现。

两种结果的概率都是50%。什么使你认为它不是?

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


运行一个1000万次迭代的循环会得到5000931到4999069的比率,这是万分之一的误差(0.00931%)。

它会给你均匀的分布

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

var a=新数组(0,0);对于(i=0;i如果您不相信,请检查:

<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合计=0;
var=0;
对于(变量i=0;i<100000;i++,总计++){
1+=数学地板(数学随机()*2);
}
警报(个/总数);
这段代码给了我0.49972-非常接近50%。

试试看:

<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>

var 0=0;
Var1=0;

对于(var i=0;iIMO),这是可以的。
Math.random()*2
返回一个介于0和1.99之间的数字;如果值为0-0.99,它将为0,如果值为1-1.99,则为1,因此它非常均匀。但恐怕有人有更好的想法。为什么你不认为这两个值中的任何一个都是50%呢?运行这10000次并平均结果,我得到0.5026,这几乎正好是0的50%1。(这是在Firefox4中)哦,这是一个我以前从未见过的巧妙技巧(地址栏中的javascript编码)。不再为我编写嵌入源代码的HTML文件。+1就是为了这个!@paxdiablo,或者你可以使用Firefox中的Firebug控制台,包括Chrome的控制台,包括Opera的控制台。不知道其他浏览器,但他们可能也有插件或工具。
<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>