random()

Generate a pseudo-random number from the default state

Synopsis:

#include <stdlib.h>

long random( void );

Library:

libc

Use the -l c option to qcc to link against this library. This library is usually included automatically.


Note: This function is in libc.a, but not in libc.so (in order to save space).

Description:

The random() function uses a nonlinear additive feedback random-number generator employing a default state array size of 31 long integers to return successive pseudo-random numbers in the range from 0 to 231-1. The period of this random-number generator is approximately 16 × (231-1). The size of the state array determines the period of the random-number generator. Increasing the state array size increases the period.

Use this function in conjunction with the following:

initstate()
Initialize the state of the pseudo-random number generator.
setstate()
Specify the state of the pseudo-random number generator.
srandom()
Set the seed used by the pseudo-random number generator.

The random() and srandom() functions have (almost) the same calling sequence and initialization properties as rand() and srand() The difference is that rand() produces a much less random sequence. In fact, the low dozen bits generated by rand() go through a cyclic pattern. All the bits generated by random() are usable. For example,

random() & 01

produces a random binary value.

Unlike srand(), srandom() doesn't return the old seed because the amount of state information used is much more than a single word. The initstate() and setstate() routines are provided to deal with restarting/changing random number generators. With 256 bytes of state information, the period of the random-number generator is greater than 269.

Like rand(), random() produces by default a sequence of numbers that can be duplicated by calling srandom() with 1 as the seed.

If initstate() hasn't been called, random() behaves as though initstate() had been called with seed=1 and size=128.

If initstate() is called with size less than 8, random() uses a simple linear congruential random number generator.

Returns:

The generated pseudo-random number.

Examples:

See initstate().

Classification:

POSIX 1003.1 XSI

Safety:
Cancellation point No
Interrupt handler No
Signal handler Yes
Thread No

See also:

drand48(), initstate(), rand(), setstate(), srand(), srandom()