• 关于 Math.random()生成指定范围内的随机数的公式推导


    🚀 优质资源分享 🚀

    学习路线指引(点击解锁)知识定位人群定位
    🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
    💛Python量化交易实战💛入门级手把手带你打造一个易扩展、更安全、效率更高的量化交易系统

    关于 Math.random()生成指定范围内的随机数的公式推导

    在 java 中,用于生成随机数的 Math 方法 random()只能生成 0-1 之间的随机数,而对于生成指定区间,例如 a-b 之间的随机数,却只能用相关计算公式。
    这个计算公式大家所熟知:

    int num = (int) (a + Math.ransom() *(b-a+1));
    
    
    • 1
    • 2

    对于这个公式,想必使用过的一定不会陌生,但是,时至今日,相信还有许多小伙伴对这个公式处于只会用,而不知其从何而来的境界。
    这个公式设计的数学知识甚少,只是里面绕了一个弯,便把大部分人给绕晕了,希望这篇短小而又精悍的文章能够给大家带来些许帮助。

    言归正传,首先,我们例如要求[a,b]之间的随机整数。
    而 Math 的 random 方法只能生成(0,1)之间的随机数,这时,我们给 Math.random()生成的随机数乘上一个 b,也就是变成了公式

    Math.random()*b
    
    
    • 1
    • 2

    也就是(0,1)b,这时,能生成的随机数范围变成了(0,b)(tips:因为 0b=0,1*b=b),这时,我们要求的范围已经求出了他的最大范围值,但是,最先范围由于乘法还是零,所以,我们在再给(0,b)的取值再加 a

    a+Math.random()*b;
    
    
    • 1
    • 2

    这个公式最后给出的结果范围是(a,b+a);
    这个结果与我们的期望值相差甚远,但是,如果我们在第一步

    Math.random()*b
    
    
    • 1
    • 2

    时,将b改为(b-a),即

    Math.random()*(b-a);
    
    
    • 1
    • 2

    这时,范围为(0,b-a),再进行第二步

    a+Math.random()*(b-a);
    
    
    • 1
    • 2

    这时,完成后的取值范围就是(a,b)。
    但是,最后需要注意的是,我们通过random所求的公式,是一个(a,b)的浮点数,当我们转为int类型后,其取值范围是[a,b-1]。(例如(2,7)的取值范围,转为整数只能取2,3,4,5,6)
    这时,我们需要最大取值范围再加1,于是,我们在第一步骤时就要完成

    Math.random()*(b-a+1);
    
    
    • 1
    • 2

    所以,最终,我们会得到公式:

    a+Math.random()*(b-a+1);
    
    
    • 1
    • 2
  • 相关阅读:
    E - Replace Digits(线段树)
    StringBuffer与StringBulider的区别?来看看源码
    Linux指令二【进程,权限,文件】
    小程序无感刷新
    Java异常
    每天分享几个面试题(六)
    设计模式 23 访问者模式
    MySQL高可用复制管理工具 —— Orchestrator使用
    安卓高通机型的基带移植 修改 编译的相关 增加信号 支持5G等
    C++重温笔记(七): C++模板与泛型程序设计
  • 原文地址:https://blog.csdn.net/m0_56069948/article/details/126654081