javascript - Math.random() 的概率修饰符

标签 javascript math random

我想知道创建概率的最佳或最被接受的方法是什么。我做了一些研究,发现了一些关于 Math.random() 主题的有趣问题和答案,例如:

How random is JavaScript's Math.random?

Generating random whole numbers in JavaScript in a specific range?

我正在寻找一种使用 Math.random() 来修改值为真或不为真的概率的简单方法

例如,我知道 Math.floor(Math.random() * 2) 是一种有用的方法,可以在近 50% 的时间内生成 1:

-Math.random() 生成0(含)到1(不含)之间的随机数

-如果生成的数<0.5,这个数乘以2还是会小于1,所以这个数.floor()返回一个0

-如果生成的数>0.5,这个数乘以2就会大于1,所以这个数.floor()返回一个1

我想使用“修饰符”来调整获得 1 的概率,这与我必须达到的期望概率非常接近...

每次运行代码片段时,控制台都会打印命中百分比。如您所见,它们几乎准确,但不完全准确。我通过反复试验想出了指数修改功能。有什么办法可以使它更准确吗?

var youHit = Math.floor(Math.random() * 2);
var totalTries = 0;
var hits = 0;

var pointNine = 0.9; // you want 90% of tries to hit
var pointEight = 0.8;// you want 80% of tries to hit 
var pointSeven = 0.7;// you want 70% of tries to hit
  
function probCheck(modifier) {
  var exponent = 1 + (1 - modifier) + (1 - modifier)*10;
  for (var x = 0; x < 100; x++) {
     youHit = Math.floor((Math.pow(modifier, exponent)) + (Math.random() * 2));
     totalTries += 1;
     if (youHit) {
        hits += 1;
     } 
  }
  console.log("final probability check: " + hits / totalTries);
};

 probCheck(pointNine);
 probCheck(pointEight);
 probCheck(pointSeven);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

最佳答案

指数在这里没有意义。退一步说:[0, 1) 上的一个均匀分布的数小于同一范围内的 x 的概率为 x,所以:

function randomHit(modifier) {
    return Math.random() < modifier;
}

测试:

function randomHit(modifier) {
  return Math.random() < modifier;
}

function probCheck(modifier) {
  var totalTries = 100;
  var hits = 0;

  for (var x = 0; x < totalTries; x++) {
    if (randomHit(modifier)) {
      hits++;
    }
  }

  console.log("final probability check: " + hits / totalTries);
}

probCheck(0.9);
probCheck(0.8);
probCheck(0.7);

关于javascript - Math.random() 的概率修饰符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43080360/

相关文章:

java - 从一个 AffineTransform 到另一个形状的最大边界框

javascript - 随机化数组中的对象

Java - 无法让它工作

objective-c - 将随机生成的 NSString 添加到 NSMutableArray 的算法

javascript - 浏览器渲染和 JavaScript 执行是否同时发生?

javascript - jQuery 智能搜索显示/隐藏内容元素

Javascript 书签将当前页面的 url 发送到 bing

javascript - 如何在每次刷新时更改选取框标记中的文本颜色

javascript - 如何使用 TensorFlow.js 进行多变量回归

math - 有人可以解释一下汇编中多精度乘法的过程吗?