我试图理解这种方法背后的逻辑。例如,我有以下代码:
function getRandomArbitrary(min, max){
return Math.random() * (max - min) + min;
}
我知道这个函数在调用时会调用一个介于最小值和最大值之间的随机数,但我不明白程序是如何通过从最大值减少最小值,再次添加最小值,然后乘以 random() 方法。
请记住这里的运算顺序:Math.random()
和(max - min)
的乘法将在添加到min
之前发生。
至于其余部分是如何工作的,让我们用一些示例值来分解它。 假设我们像这样调用此方法:
getRandomArbitrary(3, 10);
我们使用min=3
和max=10
,这使得公式的其余部分看起来像这样(为清楚起见,添加了额外的括号):
return (Math.random() * (10 - 3)) + 3;
// return (Math.random() * 7) + 3;
根据文档,Math.random()
将返回"一个浮点伪随机数,范围在0到小于1(包括0,但不是1)"。通过将这个随机数乘以另一个数字,我们正在改变我们正在处理的范围。
我们最初的下限范围是0
和0 * 7 = 0
,因此保持0
。 我们的初始上限是<1
(alllllllllmost 1,但总是小于它),所以如果那么我们的新上限是<1 * 7 = <7
.因此,Math.random() * 7
的值将是0
和<7
之间的随机数。
最后,我们将我们想要的min
值添加到我们的结果中,这将再次改变我们的范围。下限现在将0 + 3 = 3
,上限范围将<7 + 3 = <10
,所以现在我们得到一个随机数投注