有一个existing question / answer处理在JavaScript中实现概率,但是我已经阅读并重新阅读了该答案,并且不理解它是如何工作的(为了我的目的)或者更简单的概率版本如何看。
我的目标是:
function probability(n){
// return true / false based on probability of n / 100
}
if(probability(70)){ // -> ~70% likely to be true
//do something
}
实现这一目标的简单方法是什么?
答案 0 :(得分:7)
你可以做点像......
var probability = function(n) {
return !!n && Math.random() <= n;
};
然后使用probability(.7)
调用它。它有效,因为Math.random()
会在0
和1
之间返回一个数字(见注释)。
如果您必须使用70
,只需将其除以功能正文中的100
。
答案 1 :(得分:3)
probability(n){
return Math.random() < n;
}
// Example, for a 75% probability
if(probability(0.75)){
// Code to run if success
}
如果我们读到有关Math.random()的信息,它将以[0; 1)间隔返回一个数字,其中包括0
但不包括1
,因此为了保持均匀分布,我们需要排除上限,也就是说,使用<
而不是<=
。
检查上下限概率(分别为0%或100%):
我们知道0 ≤ Math.random() < 1
是这样的,
概率为0%(当n === 0
时,它应始终返回false):
Math.random() < 0 // That actually will always return always false => Ok
100%的概率(当n === 1
时,它应始终返回true):
Math.random() < 1 // That actually will always return always true => Ok
// Function Probability
function probability(n){
return Math.random() < n;
}
// Running test with a probability of 86% (for 10 000 000 iterations)
var x = 0;
var prob = 0.86;
for(let i = 0; i < 10000000; i++){
if(probability(prob)){
x += 1;
}
}
console.log(`${x} of 10000000 given results by "Math.random()" were under ${prob}`);
console.log(`Hence so, a probability of ${x / 100000} %`);
答案 2 :(得分:0)
这更简单:
function probability(n) {
return Math.random() <= n;
}