如何解决计算随机数出现的百分比
我正在处理发行问题。例如:我想调用一个函数,该函数应触发第二个函数。第二个功能可以是3个(三个)选项之一。我想要: 函数A应该在10%的时间内被调用 函数B应该在20%的时间内被调用 函数C应该在70%的时间内被调用
有2个选项(70%-30%),非常简单。我生成了一个随机整数Math.round(Math.random()* 100),然后检查结果是否
但是,在涉及两个以上的选择时,我遇到了逻辑问题。
这是大纲:
//Initialize variables
var twentyPercentCount = 0;
var seventyPercentCount = 0;
var tenPercentCount = 0;
//Iterate 10,000 times
for (var i = 0; i < 10000; i++) {
// generate whole integer 0-99
// logic
}
console.log("number of times value is < 20: " + twentyPercentCount);
console.log("number of times value is < 70: " + seventyPercentCount);
console.log("remaining ten percent range: " + tenPercentCount);
我目前正在尝试什么:
var twentyPercentCount = 0;
var seventyPercentCount = 0;
var tenPercentCount = 0;
var distributionArray = [10,20,100];
for (var i = 0; i < 10000; i++) {
var rnd = Math.round(Math.random() * 100);
// find first element > the random number
let chosenNum = distributionArray.find((element) => element >= rnd);
if (chosenNum == 100) {
seventyPercentCount += 1;
} else if (chosenNum == 20) {
twentyPercentCount += 1;
} else {
tenPercentCount += 1;
}
}
console.log("number of values less than 10: " + twentyPercentCount);
console.log("number of values less than 20: " + twentyPercentCount);
console.log("70 percent range: " + seventyPercentCount);
结果
**number of values less than 10: 943
number of values less than 20: 943
70 percent range: 8025**
问题在于10%和20%的存储桶仍然相等。我知道这是我的逻辑缺陷,但无法克服。
解决方法
您可以获取所需分布的总和
[10,20,70] // distribution
[10,30,100] // totals
并检查随机值。
const
distribution = [10,70],totals = distribution.map((s => v => s += v)(0));
count = [0,0];
for (var i = 0; i < 10000; i++) {
const
rnd = Math.random() * 100,chosenNum = totals.findIndex(element => rnd < element);
count[chosenNum]++;
}
console.log(count);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。