Calculate random integer inside a range of real numbers

66 Views Asked by At

$$F : \Bbb R \times \Bbb R \rightarrow \Bbb N $$ $$F(\text{minReal},\ \text{maxReal}) = \text{randomInt} \in \left[\text{minReal},\ \text{maxReal}\right] $$

Let $r \in [0, 1)$ be a random value. How can I define the above function F?

Note that a simple expression like: $$F(\text{minReal},\ \text{maxReal}) = \operatorname{round}(r (\text{maxReal} - \text{minReal}) + \text{minReal})$$ doesn't work because it may return an integer $\notin \left[\text{minReal},\ \text{maxReal}\right]$.

2

There are 2 best solutions below

0
On

If exists an integer number between minFloat and maxFloat this should work:

let min = ceil(minFloat)

let max = floor(maxFloat)

F(minFloat, maxFloat) = floor(r * (max - min + 1) + min)

2
On

$\large\tt C++$:

#include <cstdlib>
using namespace std;
const double RANDMAX1=double(RAND_MAX) + 1.0;

inline double rand01() // Return random in [0,1)
{
 return rand()/RANDMAX1;
}


// Return random in [minVal,maxVal)
double randMinMax(double minVal,double maxVal)
{
 const double d=maxVal - minVal;
 double x;
 do x=minVal + rand01()*d; while (  ( x<minVal ) || ( x>maxVal )  );
 return x;
}

${\large\tt javaScript}$:

function randMinMax(minVal,maxVal)
{
 var d=maxVal - minVal,x;

 do x=minVal + Math.random()*d; while (  ( x<minVal ) || ( x>maxVal )  );
 return x;
}