# RAND - obtain pseudo-random number.

(ANSI Standard)

### Usage:

```#include <stdlib.h>
i = rand();```

### Where:

int i;
is a pseudo-random number in the range 0 to RAND_MAX (where RAND_MAX is a manifest defined in <stdlib.h>).

### Description:

"rand" returns a pseudo-random number. Each new call to "rand" returns a new number.

This implementation uses a "linear congruential" generator. These generators are very fast, but have the property that the lowermost bits of the number returned may not be particularly random. The number returned is a "good random number" in the sense that:

`rand()/((double)RAND_MAX + 1)`

is a good approximation to a uniform random distribution in the interval 0<= r < 1. Thus if you want to generate a floating point number in the range [0,X) (including zero, but strictly less than X), you could use the formula:

`X * (rand() / ((double)RAND_MAX + 1))`

but the following would be a little better.

`rand()/(((double)RAND_MAX + 1) / X)`

Thus, if you want to generate a random sequence of integers between 0 and N-1, you could use the formula:

`rand()/(int)(((unsigned)RAND_MAX + 1) / N)`

However, truncation in the denominator means that this will sometimes produce N. You could produce a floating point number and truncate to an integer.

`(int)(rand() / (((double)RAND_MAX + 1)/ N));`

but it is better just to discard the occasional N that is generated, as in

`while (N <= (val = rand() / (RAND_MAX/N)));`