RAND(3) Linux Programmer's Manual RAND(3)
**NAME**
rand, srand - random number generator.
**SYNOPSIS**
**#include** **<stdlib.h>**
**int** **rand(void);**
**void** **srand(unsigned** **int** *seed***);**
**DESCRIPTION**
The **rand()** function returns a pseudo-random integer
between 0 and **RAND***_***MAX**.
The **srand()** function sets its argument as the seed for a
new sequence of pseudo-random integers to be returned by
**rand()**. These sequences are repeatable by calling **srand()**
with the same seed value.
If no seed value is provided, the **rand()** function is auto-
matically seeded with a value of 1.
**RETURN** **VALUE**
The **rand()** function returns a value between 0 and
RAND_MAX. The **srand()** returns no value.
**NOTES**
The versions of **rand()** and **srand()** in the Linux C Library
use the same random number generator as **random()** and **sran-**
**dom()**, so the lower-order bits should be as random as the
higher-order bits. However, on older **rand()** implementa-
tions, the lower-order bits are much less random than the
higher-order bits.
In *Numerical* *Recipes* *in* *C:* *The* *Art* *of* *Scientific* *Computing*
(William H. Press, Brian P. Flannery, Saul A. Teukolsky,
William T. Vetterling; New York: Cambridge University
Press, 1990 (1st ed, p. 207)), the following comments are
made:
"If you want to generate a random integer between 1
and 10, you should always do it by
j=1+(int) (10.0*rand()/(RAND_MAX+1.0));
and never by anything resembling
j=1+((int) (1000000.0*rand()) % 10);
(which uses lower-order bits)."
Random-number generation is a complex topic. The *Numeri-*
*cal* *Recipes* *in* *C* book (see reference above) provides an
excellent discussion of practical random-number generation
issues in Chapter 7 (Random Numbers).
For a more theoretical discussion which also covers many
practical issues in depth, please see Chapter 3 (Random
Numbers) in Donald E. Knuth's *The* *Art* *of* *Computer* *Program-*
*ming*, volume 2 (Seminumerical Algorithms), 2nd ed.; Read-
ing, Massachusetts: Addison-Wesley Publishing Company,
1981.
**CONFORMING** **TO**
SVID 3, BSD 4.3, ISO 9899
**SEE** **ALSO**
**random**(3), **srandom**(3), **initstate**(3), **setstate**(3)
GNU 18 May 1995 1