我想知道创建概率的最佳或最被接受的方法是什么。我做了一些研究,发现了一些关于 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/