JavaScript求任意区间随机整数方法以及数学原理模型

本文详细介绍了如何使用JavaScript的floor()和ceil()方法生成任意区间内的随机整数,包括[m,n),[m,n],(m,n),(m,n]四种情况,并提供了相应的数学推导过程。内容涵盖初中不等式基础知识,适用于JavaScript开发者和数学爱好者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

涉及数学原理模型为初中不等式基础知识。

对于任意整数m、n,m<n,用JS获取m、n之间的随机整数。

区间内随机整数生成公式

一、floor()方法实现公式如下:

[m,n)区间内的随机整数:

//[m,n)范围内的随机整数
  var a = Math.random(); //[0,1)范围内的随机数
  var num = Math.floor((n - m) * a + m);

(m,n)区间内的随机整数:

 var a = Math.random(); //[0,1)范围内的随机
 var num = Math.floor((n - m-1) * a + m+1);

[m,n]区间内的随机整数(等价于[m,n+1)区间内的随机整数:

var a = Math.random(); //[0,1)范围内的随机数
var num = Math.floor((n+1 - m) * a + m);

(m,n]区间内的随机整数(等价于[m+1,n+1)区间内的随机整数):

 var a = Math.random(); //[0,1)范围内的随机数
 var num = Math.floor((n-m) * a + m+1);

二、ceil()方法实现公式如下:

1、(m,n]范围内的随机整数(m、n均为整数,m<n):

  var a = Math.random(); //[0,1)范围内的随机数
  var b = -a + 1;//(0,1]范围内的随机数
  var num = Math.ceil((n - m) * b + m);

2、(m,n)范围内的随机整数(m、n均为整数,m<n):

 var a = Math.random(); //[0,1)范围内的随机数
 var b = -a + 1;//(0,1]范围内的随机数
 var num = Math.ceil((n - 1 - m) * b + m);

 3、[m,n)范围内的随机整数(m、n均为整数,m<n):

   var a = Math.random(); //[0,1)范围内的随机数
   var b = -a + 1;//(0,1]范围内的随机数
   var num = Math.ceil((n - m) * b + m-1);

4、[m,n]范围内的随机整数(m、n均为整数,m<n):

var a = Math.random(); //[0,1)范围内的随机数
var b = -a + 1;//(0,1]范围内的随机数
var num = Math.ceil((n - m+1) * b + m-1);

 数学推导过程

floor()方法

对于任意整数m、n,m<n,用JS表示获取m、n之间的随机整数。

公式如下:

数学推导过程:

 a=Math.random() ,它的值为0≤ Math.random()<1。真实情况下,由于JavaScript设计存储为十六为小数,实际代表数值所能代表的极限为0≤ Math.random()≤0.

 一、区间随机整数推导

1、若a为区间为[0,1)的随机数,用a表示区间[0,10)的随机数b,写出a、b关系的数学表达式。

b=10a

2、若a为区间为[0,1)的随机数,用a表示区间[2,12)的随机数b,写出a、b关系的数学表达式。

b=10a+2

3、若a为区间为[0,1)的随机数,用a表示区间[2,10)的随机数b,写出a、b关系的数学表达式。

随机数a、b满足0≤a<1,2≤b<10,需要写出a、b的数学关系式。只需要将两个不等式转化为前后系数相同即可。

0≤a<1 转化为 2≤?<10的形式

0≤a<1

左右各式乘以正数k:

0≤ak<k

左右各式加2可得:

2≤ak+2<k+2

与2≤b<10不等式前后项对比可得:

ak+2=b

k+2=10

可以得知:

k=10-2

b=(10-2)a+2

由特殊到一般,可以推导得知:

若a为区间为[0,1)的随机数,用a表示区间[m,n)的随机数b,写出a、b关系的数学表达式。(m<n)

b=(n-m)a+m

那么对b向下取整即[m,n)范围内的随机整数。

JS代码如下:

//[m,n)范围内的随机整数
    function f(m, n) {
      var a = Math.random(); //[0,1)范围内的随机数
      var num = Math.floor((n - m) * a + m);
      return num;
    }

上面代码等价于求[m,n-1]区间内的随机整数。m、n为正整数,n>m。

那么对于[m,n]区间内的随机整数JS代码如下:

  //[m,n]范围内的随机整数(n>m)
  function f(m, n) {
      var a = Math.random(); //[0,1)范围内的随机数
      var num = Math.floor((n+1 - m) * a + m);
      return num;
    }

那么对于(m,n]和(m,n)区间的随机整数情况呢?

(m,n)区间的随机整数,等价于[m+1,n)区间内的随机整数,可以获取JS代码:

//(m,n)范围内的随机整数
    function f(m, n) {
      var a = Math.random(); //[0,1)范围内的随机数
      var num = Math.floor((n - m-1) * a + m+1);
      return num;
   } 

(m,n]区间的随机整数,等价于[m+1,n-1)区间内的随机整数,可以获取JS代码:

   // (m,n]区间的随机整数,等价于[m+1,n+1)区间内的随机整数
    function f(m, n) {
      var a = Math.random(); //[0,1)范围内的随机数
      var num = Math.floor((n-m) * a + m+1);
      return num;
    }

 ceil()方法

对于任意整数m、n,m<n,用JS表示获取m、n之间的随机整数。

a=Math.random() ,它的值为0≤ Math.random()<1

0≤a1

由于ceil()方法是向上取整,需要基础随机数进行调整才能满足JS取整数区间内随机整数的条件。

 

如图所示,ceil()方法若想实现类似floor()方法的相同的效果,需要有一个基础随机变量在(0,1]范围内,才能满足条件。

0≤a1……①

那么①x(-1)

-1<-a≤0……②

①+1得:

0<-a+1≤1……③

令β=-a+1,则0<β≤1。

1、若β为(0,1]的随机数,用β表示区间(0,10]的随机数b,写出β、b关系的数学表达式。

b=10β

2、若β为(0,1]的随机数,用β表示区间(2,12]的随机数b,写出β、b关系的数学表达式。

b=10β+2

3、若β为(0,1]的随机数,用β表示区间(2,10]的随机数b,写出β、b关系的数学表达式。

0<β≤1,2<x≤10;

2<x≤10

不等式各项同时减去2

0<x-2≤8

不等式各项除以8

0<(x-2)/8  ≤1

(x-2)/8=β

变形有:

x=8β+2

β、b关系的数学表达式:

b=8β+2

由特殊到一般,可以推导得知:

若β为区间为(0,1]随机数,用β表示区间(m,n]的随机数b,写出β、b关系的数学表达式。(m<n)

b=(n-m)β+m

那么对b向上取整即(m,n]范围内的随机整数。

JS代码:

1、(m,n]范围内的随机整数(m、n均为整数,m<n):

// (m,n] m n均为整数 ,m<n

  function f(m, n) {

      var a = Math.random(); //[0,1)范围内的随机数

      var b = -a + 1;//(0,1]范围内的随机数

      var num = Math.ceil((n - m) * b + m);

      return num;

    }

2、(m,n)范围内的随机整数(m、n均为整数,m<n): 

// (m,n) m n均为整数 ,m<n

    //(m,n)范围内随机整数,等价于(m,n-1]范围内随机整数

    function f(m, n) {

      var a = Math.random(); //[0,1)范围内的随机数

      var b = -a + 1;//(0,1]范围内的随机数

      var num = Math.ceil((n - 1 - m) * b + m);

      return num;

    }

   3、[m,n)范围内的随机整数(m、n均为整数,m<n):
 

  // [m,n)范围内的随机整数(m、n均为整数,m<n)

    //[m,n)范围内随机整数,等价于(m-1,n-1]范围内随机整数

    function f(m, n) {

      var a = Math.random(); //[0,1)范围内的随机数

      var b = -a + 1;//(0,1]范围内的随机数

      var num = Math.ceil((n - m) * b + m-1);

      return num;

    }

4、[m,n]范围内的随机整数(m、n均为整数,m<n):   

 // [m,n]范围内的随机整数(m、n均为整数,m<n):

    //[m,n]范围内随机整数,等价于(m-1,n]范围内随机整数

    function f(m, n) {

      var a = Math.random(); //[0,1)范围内的随机数

      var b = -a + 1;//(0,1]范围内的随机数

      var num = Math.ceil((n - m+1) * b + m-1);

      return num;

    }

思考:为什么JS主流的随机非负区间范围内的整数都是用Math.floor()方法来实现,而不采用Math.ceil()、parseInt()等方法来实现,与之对比有什么优势?感兴趣的同学试试用JS采用parseInt()等方法方法实现,思考其与floor()方法实现的区别。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值