百分比分布- JavaScript Math.random()
percentage distribution - JavaScript Math.random()
我有百分比10%, 20%和70%来决定采取哪种行动。我有两种方法来决定:#1让一个新的Math.random()每次决定,#2保留一个Math.random()结果。请参阅我在控制台中运行的代码(注意rand1
和rand2
方法):
console.log('chart1');
var chart1;
var rand1 = function() {
if (Math.random() <= 0.1) chart1[0]++;
else if (Math.random() <= 0.2) chart1[1]++;
else chart1[2]++;
};
var runs = 10000;
for (var j = 0; j < 10; j++) {
chart1 = [0,0,0];
for (var i = 0; i < runs; i++) rand1();
var log = [];
for (var k = 0; k < chart1.length; k++) {
log[k] = Math.round(chart1[k] / runs * 100);
}
console.log(log);
}
console.log('chart2');
var chart2;
var rand2 = function() {
var rand = Math.random();
if (rand <= 0.1) chart2[0]++;
else if (rand >= 0.1 && rand <= 0.3) chart2[1]++;
else chart2[2]++;
};
var runs = 10000;
for (var j = 0; j < 10; j++) {
chart2 = [0,0,0];
for (var i = 0; i < runs; i++) rand2();
var log = [];
for (var k = 0; k < chart2.length; k++) {
log[k] = Math.round(chart2[k] / runs * 100);
}
console.log(log);
}
它产生
chart1
[10, 18, 72]
[10, 17, 72]
[11, 17, 72]
[10, 18, 72]
[10, 18, 72]
[10, 18, 72]
[10, 17, 73]
[10, 18, 72]
[10, 18, 72]
[10, 18, 71]
chart2
[9, 20, 71]
[10, 21, 70]
[10, 19, 71]
[10, 20, 70]
[10, 19, 71]
[10, 20, 70]
[10, 20, 70]
[9, 20, 71]
[10, 20, 71]
[9, 20, 71]
我不明白为什么chart1
倾向于..18, 72]
那是因为数学算错了。如果您想在第二次比较中使用一个新的随机数,那么它应该在20/90的情况下为真,而不是20/100。所以:
var rand1 = function() {
if (Math.random() < 0.1) chart1[0]++;
else if (Math.random() < 0.222222222222222) chart1[1]++;
else chart1[2]++;
};
如果你不使用一个新的随机数,它就会工作,因为你知道这个数字在0.1的范围内。在第二种情况下是1.0,所以如果小于0.3那就是20/90的情况。如果你选择一个新的随机数,这个数字将在0.0的范围内。1.0 .
考虑在第一个图表的第二列中生成一个数字的概率。首先生成一个有10%概率出现在第一列的数字。如果这个数字不是出现在第一列,有90%的可能性,那么它出现在第二列的概率是20%。一个数字出现在第二个图表中的总概率是0.9 * 0.2 = 0.18。加上一些随机变化,你会得到大约18。
第三列是100 - 10 - 18 = 72。
如果接受第二个值的概率由2/10改为2/9,则接受的总概率为9/10 * 2/9 = 2/10,即20%,这正是您想要的。
嗯…为什么在if条件下再次调用Math.random() .????像这样使用。
var rand1 = function(){
var number = Math.random();
if(number <= 0.1) chart1[0]++;
else if(number <= 0.3) chart1[1]++;
else chart1[2]++;
};
现在这会给出你想要的正确输出
相关文章:
- 如何使一个Math.random数组元素比另一个数组元素更有可能被选中
- Math.random不断返回相同的答案
- JS:如何在使用 Math.random() 时排除一系列值
- Javascript;使用math.random函数随机执行一个操作
- Math.random()如何在javascript中工作
- for loop, Math.random() 不按预期运行
- 在 jQuery 中的 Math.random() 之后找到 “li”
- Math.floor(Math.random()) +1 实际上做了什么
- 掷骰子脚本均匀分布吗?(使用 Math.random())
- 带有 php 变量的 Math.random javascript
- 你如何使 Math.random 数组中的每一个第 9 个元素都是同一个元素?[JavaScript]
- Java - ScriptEngineManager nashorn Math.random 不起作用
- 无法正确使用Math.random
- 增加Math.random中某个数字在一定范围内的机会
- 如何将 Math.random() 方法生成的当前值与以前的值进行比较
- Javascript单选按钮鼠标悬停在移动图像上,使用math.random
- Math.Random在函数中总是相同的结果
- 如何在 JavaScript 中使用 Math.random 进行测试
- 谷歌地图API使用Math.random获取随机位置 - JS
- (Math.random()*x)+y 返回大于 x+y 的数字