有没有更简单的方法在JavaScript中实现概率函数?

时间:2014-10-09 06:38:26

标签: javascript

有一个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
}

实现这一目标的简单方法是什么?

3 个答案:

答案 0 :(得分:7)

你可以做点像......

var probability = function(n) {
     return !!n && Math.random() <= n;
};

然后使用probability(.7)调用它。它有效,因为Math.random()会在01之间返回一个数字(见注释)。

如果您必须使用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;
}