COHERENT manpages
This page displays the COHERENT manpage for rand() [Generate pseudo-random numbers].
List of available manpages
Index
rand() -- Random-Number Function (libc)
Generate pseudo-random numbers
#include <stdlib.h>
int rand()
rand() generates a set of pseudo-random numbers. It returns integers in
the range 0 to 32,767, and purportedly has a period of 2^32. rand() will
always return the same series of random numbers unless you first call the
function srand() to change rand()'s seed, or beginning-point.
Example
The following example uses rand() to implement the ``Let's Make a Deal''
game of probability described by Massimo Piattelli-Palmarini in the
March/April 1991 issue of Bostonia magazine. In brief, an investigator
places a dollar bill into one of three boxes. A subject enters the room
and guesses which box holds the bill. The investigator then opens one of
the two unselected boxes (one that is always empty), shows it to the
subject, then offers the subject a choice: either stand pat with the box he
has selected, or switch to the other non-selected box. The laws of
probability state that the subject should always switch from the box he has
selected; this example program tests that hypothesis.
#include <stdio.h>
#include <time.h>
main()
{
int box[3], win, i, j;
srand(time(NULL));
/* Test 1: the subject always stands pat. For the sake of simplicity,
* the subject always chooses box 0. */
for (i = 0, win = 0; i < 1500; i++) {
for (j = 0; j < 3; j++)
box[j] = 0;
box[rand()%3]++;
if (box[0])
win++;
}
printf("Test 1, always stand pat: 1500 iterations, %d winners\n", win);
/* Test 2: the subject always switches boxes. */
for (i = 0, win = 0; i < 1500; i++) {
for (j = 0; j < 3; j++)
box[j] = 0;
box[rand()%3]++;
/* if box 2 is empty, pick box 1 */
if (!box[2])
win += box[1];
else
win += box[2];
}
printf("Test 2, always switch: 1500 iterations, %d winners\n", win);
/* Test 3: the subject switches boxes randomly. */
for (i = 0, win = 0; i < 1500; i++) {
for (j = 0; j < 3; j++)
box[j] = 0;
box[rand()%3]++;
/* if box 2 is empty, pick box 1 */
if (!box[2]) {
if (rand()%2)
win += box[1];
else
win += box[0];
} else {
if (rand()%2)
win += box[2];
else
win += box[0];
}
}
printf("Test 3, randomly switch: 1500 iterations, %d winners\n", win);
}
See Also
libc,
RAND_MAX,
srand(),
stdlib.h
The Art of Computer Programming, vol. 2
ANSI Standard, §7.10.2.1
POSIX Standard, §8.1
Notes
This function cannot be used with any of the ``rand48'' functions. For an
overview of these functions, see the entry for srand48().




