【问题标题】:evenly distributed random numbers均匀分布的随机数
【发布时间】:2011-08-08 14:52:00
【问题描述】:

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

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

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

【问题讨论】:

  • IMO 这没关系。 Math.random() * 2 返回一个介于 0 和 1.99 之间的数字;地板它会给你 0 值 0-0.99 和 1 值 1-1.99 所以它很均匀。但恐怕有人有更好的主意。
  • 你为什么不认为这对于任何一个来说都是 50%?运行这 10000 次并对结果取平均值给我 0.5026,这几乎是 50% 0 和 50% 1。 (在 Firefox 4 中)

标签: javascript random


【解决方案1】:

它以相等的机会生成 0 或 1。

但是你为什么不使用:

Math.round(Math.random())

?您是否希望能够更改以生成 0, 1, 2, ..., N ?如果是这样,请保留您的实施。

【讨论】:

    【解决方案2】:

    任何一个结果的机会都是 50%。是什么让您认为它不是?

    【讨论】:

      【解决方案3】:

      足够接近 50%,如果您担心差异(如果确实存在差异),那么您一开始就不会使用伪随机数 :-)

      运行具有 1000 万次迭代的循环得到的比率为 5,000,931 与 4,999,069,误差仅为万分之一 (0.00931%)。

      【讨论】:

        【解决方案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);
        

        【讨论】:

        • 哦,这是我以前从未见过的巧妙技巧(地址栏中的 JavaScript 编码)。不再为我编写带有嵌入式源代码的 HTML 文件。为此 +1!
        • @paxdiablo 或者你可以在 Firefox 中使用 Firebug 的控制台,Chrome 包含的控制台,Opera 包含的控制台。不知道其他浏览器,但他们可能也有插件或工具。
        【解决方案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%。

        【讨论】:

          【解决方案6】:

          试试吧:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-12-28
            • 2020-04-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多