### Question 13.16

How can I get random integers in a certain range?

The obvious way,

    	rand() % N		/* POOR */

(which tries to return numbers from `0` to `N-1`) is poor, because the low-order bits of many random number generators are distressingly non-random. (See question 13.18.) A better method is something like

    	(int)((double)rand() / ((double)RAND_MAX + 1) * N)

If you're worried about using floating point, you could use

    	rand() / (RAND_MAX / N + 1)

Both methods obviously require knowing `RAND_MAX` (which ANSI `#define`s in `<stdlib.h>`), and assume that `N` is much less than `RAND_MAX`.

(Note, by the way, that `RAND_MAX` is a constant telling you what the fixed range of the C library `rand` function is. You cannot set `RAND_MAX` to some other value, and there is no way of requesting that `rand` return numbers in some other range.)

If you're starting with a random number generator which returns floating-point values between 0 and 1, all you have to do to get integers from 0 to `N-1` is multiply the output of that generator by `N`.

References: K&R2 Sec. 7.8.7 p. 168
PCS Sec. 11 p. 172

Read sequentially: prev next up top

This page by Steve Summit // Copyright 1995 // mail feedback