使用场景:
假设random生成范围为[a, b]的随机数(A),现在需要在random的基础上生成一个范围为[c, d]的随机数(B),该如何封装random?
解决方法:
首先明确 A 和 B是一种线性关系, 关系式可以写成:
[a, b] * x + y = [c, d]
即求出 x, y 的值。
范围中的最大值和最小值都应该满足关系:
[a * x + y, b * x + y] = [c, d]
得到二元一次方程:
a * x + y = c;
b * x + y = d;
解方程:
(b - a) * x = d - c;
求出x的值:
x = (d - c) / (b - a) ;
求出y的值:
y = c - a(d - c) / (b -a);
带到random中,得到公式如下:
random * (d - c) / (b - a) + c - a(d - c) / (b -a) = [c, d]
使用公式前需要计算的值有:
范围A (最大值 - 最小值)
范围B (最大值 - 最小值)
使用示例:
Math.random 随机数范围为 [0, 1),获取一个在指定值之间的随机数。这个值不小于 min(有可能等于),并且小于(不等于)max?
带入公式得:
Math.random() * (max - min) + min = [min, max)