1
$\begingroup$

Given some random number function rand, and some numbers $x$ and $y$, how do you find a random number $r$ such that $r\geq x \wedge r \leq y$?

Previously i've tried (and somewhat failed) with formulas like $$ r = \text{rand()}\bmod \frac{x}{y} $$ or $$ r = \text{rand()}\bmod x + 1 $$ or, given that $y>x$, $$ r = (\text{rand()}\bmod (y-x))+x $$ Is there a better or truer way to do this?

1 Answers 1

7

Let $x \lt y$. The usual pseudo-random number generators produce a number between $0$ and $1$. Multiply the result by $y-x$, and then add $x$.

This also works fine if $y \lt x$.

  • 0
    Could you go into further detail about why this works? I have asked this as a [seperate question](http://math.stackexchange.com/questions/240330/why-does-muliplying-n-by-a-random-number-give-you-a-random-number-between-0-and) here.2012-11-19
  • 0
    @JW01: By number here we mean real number, not integer. If we multiply a number between $0$ and $1$ by $c\ne 0$, we certainly get a number between $0$ and $c$. Suppose moreover the random numbers between $0$ and $1$ are uniformly distributed $[0,1]$. Let $U$ be a random variable with uniform distribution on $[0,1]$. Let $X=cU$, where for simplicity $c$ is positive. Then for $0\le x\le c$, $\Pr(X\le x)=\Pr(cU\le x)=\Pr(U\le x/c=x/c$. This means $X$ has uniform distribution on $[0,c]$. If you wish, differentiate the cdf $x/c$ to get constant density function $1/c$.2012-11-19
  • 0
    Thanks. Its explained very succinctly. I think I get the gist. p.s I assume that there should be a closing parenthesis just before the final sentence ".This means..." ?2012-11-19
  • 0
    There should be a closing parenthesis just before the $=$ sign, a few characters before "This means."2012-11-19