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

 更新时间:2022年09月04日 19:27:52   作者:喝茶谢谢  
在 java 中,用于生成随机数的 Math 方法 random()只能生成 0-1 之间的随机数,而对于生成指定区间,例如 a-b 之间的随机数,却只能用相关计算公式,今天通过本文给大家介绍Math.random()生成随机数的公式推导问题,感兴趣的朋友一起看看吧

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

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

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

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

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

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

Math.random()*b

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

a+Math.random()*b;

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

Math.random()*b

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

Math.random()*(b-a);

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

a+Math.random()*(b-a);

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

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

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

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

到此这篇关于关于 Math.random()生成指定范围内的随机数的公式推导的文章就介绍到这了,更多相关Math.random()公式推导内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 解决struts2 拦截器修改request的parameters参数失败的问题

    解决struts2 拦截器修改request的parameters参数失败的问题

    这篇文章主要介绍了解决struts2 拦截器修改request的parameters参数失败的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Spring MVC响应结果和设置举例详解

    Spring MVC响应结果和设置举例详解

    在Web开发中,通过@Controller和@RestController注解,可以分别返回HTML页面和JSON数据,@Controller配合@ResponseBody可以返回HTML代码片段或JSON,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-11-11
  • Java工厂模式的使用细则介绍

    Java工厂模式的使用细则介绍

    工厂模式,是一种实例化对象的方式,只要输入需要实例化对象的名字,就可以通过工厂对象的相应工厂函数来制造你需要的对象
    2023-02-02
  • SpringBoot整合LDAP的流程分析

    SpringBoot整合LDAP的流程分析

    这篇文章主要介绍了SpringBoot整合LDAP的流程分析,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-05-05
  • Spring Boot 配置大全(小结)

    Spring Boot 配置大全(小结)

    本篇文章主要介绍了Spring Boot 配置大全(小结),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • SpringBoot启动应用及回调监听原理解析

    SpringBoot启动应用及回调监听原理解析

    这篇文章主要介绍了SpringBoot启动应用及回调监听原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • Java多线程中的Future类详细解读

    Java多线程中的Future类详细解读

    这篇文章主要介绍了Java多线程中的Future类详细解读,Future表示一个可能还没有完成的异步任务的结果,针对这个结果可以添加Callback以便在任务执行成功或失败后作出相应的操作,需要的朋友可以参考下
    2023-11-11
  • 深入学习java中的Groovy 和 Scala 类

    深入学习java中的Groovy 和 Scala 类

    本文将探讨三种下一代 JVM 语言:Groovy、Scala 和 Clojure,比较并对比新的功能和范例,让 Java 开发人员对自己近期的未来发展有大体的认识。,需要的朋友可以参考下
    2019-06-06
  • 解决参数命名不规范,造成使用@NotNull进行校验出现的问题

    解决参数命名不规范,造成使用@NotNull进行校验出现的问题

    这篇文章主要介绍了解决参数命名不规范,造成使用@NotNull进行校验出现的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • java List中相同的数据合并到一起

    java List中相同的数据合并到一起

    这篇文章主要介绍了java List中相同的数据合并到一起,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07

最新评论