关于 Math.random()生成指定范围内的随机数的公式推导
关于 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()生成指定范围内的随机数的公式推导的更多相关文章
- js中Math.random()生成指定范围数值的随机数
http://www.111cn.net/wy/js-ajax/57062.htm Math.random() 这个方法相信大家都知道,是用来生成随机数的.不过一般的参考手册时却没有说明如何用这个方法 ...
- 【转载】C#使用Random类来生成指定范围内的随机数
C#的程序应用的开发中,可以使用Random随机数类的对象来生成相应的随机数,通过Random随机数对象生成随机数的时候,支持设置随机数的最小值和最大值,例如可以指定生成1到1000范围内的随机数.R ...
- JS生成指定范围内的随机数(支持随机小数)
直接需要函数的话,直接到文章的最后面找. ============================================================= 转载:https://www.cn ...
- javascript 生成指定范围内的随机数
js 生成任意2个区间内的随机整数,js 生成两个数之间的随机数 function random(m,n) { return Math.floor(Math.random() * (n - m)) + ...
- java的random生成某个范围内的随机数
import java.util.Random; /** * @author HP * @date 2019/4/16 */ public class randomTest { public stat ...
- poj 1597 Uniform Generator【生成指定范围内所有随机数】
本文参考资料:http://hi.baidu.com/bnjyjncwbdbjnzr/item/1f997cfdd225d5d143c36a58 题意:一个生成随机数的函数, Seed[x+1] = ...
- shell生成指定范围内的随机数
#!/bin/bash read -p "请输入起始数:" min read -p "请输入终止数:" max if [ $min -gt $max ] the ...
- SQL - 生成指定范围内的随机数
今天按照公司需求,需要做一个sql作业来对数据库定时触发,其中有个难点,就是在sql中需要在1-n中随机出来一个结果. google了半天,找到一个比较好的方式. 写下这个sql: DECLARE @ ...
- 【转】 SQL - 生成指定范围内的随机数
DECLARE @Result INT DECLARE @Upper INT DECLARE @Lower INT SET @Lower = 1 SET @Upper = 10 SELECT @Res ...
随机推荐
- 六张图详解LinkedList 源码解析
LinkedList 底层基于链表实现,增删不需要移动数据,所以效率很高.但是查询和修改数据的效率低,不能像数组那样根据下标快速的定位到数据,需要一个一个遍历数据. 基本结构 LinkedList 是 ...
- 关于Vue的几个实用知识点(持续更新中……)
前言 排名不分先后,按自己习惯来的. 一.provide.inject 高级组件 总述: provide在父组件中定义,inject 在子孙组件中定义. provide:选项应该是一个对象或返回一个对 ...
- sql-DDL-约束
约束 对表中的数据进行限定,保证数据的正确性.有效性和完整性. 6个约束 1. 主键约束Primary Key: 唯一,不能为null -- 主键约束.和唯一约束不能同时设置 1. 含义:非空且唯一 ...
- Python控制自己的手机摄像头拍照,并把照片自动发送到邮箱
写在前面的一些P话: 今天这个案例,就是控制自己的摄像头拍照,并且把拍下来的照片,通过邮件发到自己的邮箱里.想完成今天的这个案例,只要记住一个重点:你需要一个摄像头 思路 通过opencv调用摄像头拍 ...
- Intel的CPU系列说明
至强可扩展系列是英特尔推出的新一代至强处理器系列,如今距离该系列推出几乎过去一年了.新的CPU并没有延续E系列的命名,英特尔将至强可扩展系列以金属命名,将该系列分为"铂金Platinum&q ...
- MySQL查询为什么没走索引?这篇文章带你全面解析
工作中,经常遇到这样的问题,我明明在MySQL表上面加了索引,为什么执行SQL查询的时候却没有用到索引? 同一条SQL有时候查询用到了索引,有时候却没用到索引,这是咋回事? 原因可能是索引失效了,失效 ...
- C++对象的应用
本篇文章将介绍对象数组,对象的动态分配以及对象在函数中的应用. 一.对象数组 1.对象数组的定义和初始化 定义对象数组与定义普通数组的语法形式基本相同.如定义一个Square obj[3]:表示一个正 ...
- dos命令-*02
1.cmd状态下 tab快速补充文件名 ↑↓快速填充之前输入的文件名 2.//这是Java的快速入门 //对代码的相关说明 //1.public class Hello 表示Hello是一个类,是一个 ...
- GIS技术在医疗行业的应用:利用切片地图发布技术解决dmetrix数字病理切片在线浏览
最近一直在研究切片地图发布技术,解决各种矢量和栅格数据的切片地图制作和发布问题.这块的技术在土地评估和调查类公司中应用较多,因为他们经常需要使用各地地图,传统的文件管理方式很难适应工作现状,如果将各种 ...
- ACWing93.递归实现组合型枚举
题面 \93. 递归实现组合型枚举 从 1∼n 这 n 个整数中随机选出 m 个,输出所有可能的选择方案. 输入格式 两个整数 n,m ,在同一行用空格隔开. 输出格式 按照从小到大的顺序输出所有方案 ...