我想知道创建概率的最佳或最常用的方法是什么。我做了一些研究,并在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 :(得分:3)
指数在这里没有意义。后退:[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);
&#13;