gpt4 book ai didi

JavaScript:Math.random:如何选择 190 到 255 之间的随机数 "unevenly",而不是 "evenly"?

转载 作者:行者123 更新时间:2023-11-30 12:09:34 26 4
gpt4 key购买 nike

如果您想在 190 到 255 之间选择一个随机数,期望均匀分布的结果,您需要的代码就像下面这样简单,对吗?

190 + Math.floor(Math.random() * 66);

但是,如果您更喜欢 190 到 255 之间的不均匀分布结果怎么办?我的意思是,例如,数字越接近范围的下限(即 190),选择该数字的可能性就越高。

让我们假设代码返回一个随机数:

  • between 190 and 210 with a 70% probability.
  • between 211 and 230 with a 20% probability.
  • between 231 and 255 with a 10% probability.

我认为像这样的不均匀分布为选择随机数的行为增添了一种有趣的味道。

我用两种不同的方式为此编写了代码,第二种采用更复杂的形式。几天前我才开始学习编程,所以我写了它们,利用了我目前对 JavaScript 知之甚少的知识。我想知道我是否可以更有效地表达它们。

顺便提一下,我有一个具体的问题:

1st Code ,我需要放置 var 吗?在 attackPoint = midRange 前和 attackPoint = highRangeif/else陈述?

第一个代码:

var lowRange = 190 + Math.floor(Math.random() * 21);
var midRange = 211 + Math.floor(Math.random() * 20);
var highRange = 231 + Math.floor(Math.random() * 25);

var randomHundred = 1 + Math.floor(Math.random() * 100);

if (randomHundred <= 70) {
var attackPoint = lowRange;
}
else if (randomHundred <= 90) {
var attackPoint = midRange;
}
else {
var attackPoint = highRange;
}

console.log(attackPoint);

第二个代码:

var lowRange = 190 + Math.floor(Math.random() * 21);
var midRange = 211 + Math.floor(Math.random() * 20);
var highRange = 231 + Math.floor(Math.random() * 25);

var emptyArray = [];

for (var i = 0; i < 100; i++) {
if (i < 70) {
emptyArray.push(lowRange);
}
else if (i < 90) {
emptyArray.push(midRange);
}
else {
emptyArray.push(highRange);
}
};

var attackPoint = emptyArray[Math.floor(Math.random() * 100)];

console.log(attackPoint);

最佳答案

改进方式一:

您不需要为所有 范围计算随机值,您只需要选定范围。也没有必要将 0..1 范围转换为 0..100。您可以直接处理 0..1 范围。

var q = Math.random(), attackPoint;

if (q < 0.7) {
attackPoint = 190 + Math.floor(Math.random() * 21);
}
else if (q < 0.9) {
attackPoint = 211 + Math.floor(Math.random() * 20);
}
else {
attackPoint = 231 + Math.floor(Math.random() * 25);
}

console.log(attackPoint);

关于JavaScript:Math.random:如何选择 190 到 255 之间的随机数 "unevenly",而不是 "evenly"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34198408/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com