Math.random()*(y-x)+x 公式分析

Math.random()*(y-x)+x 公式分析

欢迎

  • 本文章主要使用 JavaScript 语言,但是思想是通用的

在一些编程语言中,Math.random()只能生成一个零到一之间[0,1)的数字

我们希望生成一个[0,1)的数字

正常的使用Math.random()这个方法即可

// 生成随机数
console.log(Math.random());

// 重复运行3次
// 输出结果 0.824860163382928
// 输出结果 0.2828677085558433
// 输出结果 0.7065201777863614

我们希望生成[0,10)的数字

我们只需要把这个随机数乘一个数即可

console.log(Math.random() * 10);

// 重复运行3次
// 输出结果 7.475350215085657
// 输出结果 9.37430923250589
// 输出结果 3.7502072379588847

我们想象一个不可能情况可以帮助我更快理解

假设:我们现在的随机数是1,这个1也是我们目前最大的随机数,我们目前的方法Math.random()我们目前的区间是[0,1),我们希望区间能够扩大10倍,于是我们左右区间都乘了10,0乘10还是0,但是1乘10等于10,所以我们Math.random() * 10的区间是[0,10)

所以==我们希望他的最大区间是多少我们就在这个公式后面乘多少==,例如我希望他生成0到97之间的数字,公式就会长成这个样子

Math.random() * 97

我们希望生成一个[x,y)的数字

假设我们现在需要生成一个3到7之间的数字,我们先写出他的区间[3,7),我们可以让左区间归零,我们把左右区间同时减去3(之后会加回来)
[ 3 − 3 ⏞ 左区间 , 7 − 3 ⏞ 右区间 ) → [ 0 , 4 ) [\overbrace{3-3}^{左区间} ,\overbrace{7-3}^{右区间}) \rightarrow [0,4) [33 左区间,73 右区间)[0,4)

现在我们的区间长成这个样子[0,4),我们就可以用上面的方法写出我们的公式

console.log(Math.random() * 4);

// 重复运行3次
// 输出结果1.2476033188729243
// 输出结果 1.330843857626764
// 输出结果 3.176887420042733

然后我们现在让他的值移动到[3,7),我们可以让最终结果再加3,就可以把一开始减去的给重新加回来

for(let i = 0;i<3;i++){
    console.log(Math.random() * 4 + 3);
}

// 输出结果
// 输出结果 3.693767070707926
// 输出结果 6.000697646107264
// 输出结果 5.153719945106879

我们现在就应该发现了,这个4代表的其实是我们左区间被移动回原点时我们右区间的值,这个值等同于左右区间的差,等同于右区间减去左区间
KaTeX parse error: Expected 'EOF', got '&' at position 2: &̲&左区间被移动回原点时我们右区…
既然这个值等于右区间减去左区间,我们期待的随机数是[x,y),那么这个值自然就是y-x,然后我们再加上我们移动的数字x,最终我们公式长成这样
M a t h . r a n d o m ( ) ⏞ 生成一个 0 到 1 之间的数 × ( y − x ) ⏞ 左右区间的差 + x ⏞ 将左区间从 0 增加到 x \overbrace{Math.random()}^{生成一个0到1之间的数}\times\overbrace{(y-x)}^{左右区间的差}+\overbrace{x}^{将左区间从0增加到x} Math.random() 生成一个01之间的数×(yx) 左右区间的差+x 将左区间从0增加到x

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值