prev up next   top/contents search

comp.lang.c FAQ list · Question 13.17

Q: Each time I run my program, I get the same sequence of numbers back from rand().

A: It's a characteristic of most pseudo-random number generators (and a defined property of the C library rand) that they always start with the same number and go through the same sequence. (Among other things, a bit of predictability can make debugging much easier.) When you don't want this predictability, you can call srand to seed the pseudo-random number generator with a truly random (or at least variable) initial value. Popular seed values are the time of day, or a process ID number, or the elapsed time before the user presses a key, or some combination of these. Here's an example call, using the time of day as a seed:

	#include <stdlib.h>
	#include <time.h>

	srand((unsigned int)time((time_t *)NULL));
(There remain several difficulties: the time_t returned by time might be a floating-point type, hence not portably convertible to unsigned int without the possibility of overflow. Furthermore, if time of day is available with 1-second resolution, using it by itself means that successive runs of the program can easily get the same seed. Subsecond resolution, of time-of-day or keystroke presses, is hard to achieve portably; see question 19.37.)

Note also that it's rarely useful to call srand more than once during a run of a program; in particular, don't try calling srand before each call to rand, in an attempt to get ``really random'' numbers.

References: K&R2 Sec. 7.8.7 p. 168
ISO Sec.
H&S Sec. 17.7 p. 393

prev up next   contents search
about this FAQ list   about eskimo   search   feedback   copyright

Hosted by Eskimo North