*
*## DESCRIPTION

The **random()** function uses a non-linear additive feedback
random number generator employing a default table of size 31
long integers to return successive pseudo-random numbers in
the range from 0 to **RAND_MAX**. The period of this random
number generator is very large, approximately
16*((2**31)-1).
The **srandom()** function sets its argument as the seed for a
new sequence of pseudo-random integers to be returned by
**random()**. These sequences are repeatable by calling **sran-**
**dom()** with the same seed value. If no seed value is pro-
vided, the **random()** function is automatically seeded with a
value of 1.
The **initstate()** function allows a state array *state* to be
initialized for use by **random()**. The size of the state
array **n** is used by **initstate()** to decide how sophisticated a
random number generator it should use - the larger the state
array, the better the random numbers will be. *seed* is the
seed for the initialization, which specifies a starting
point for the random number sequence, and provides for res-
tarting at the same point.
The **setstate()** function changes the state array used by the
**random()** function. The state array *state* is used for random
number generation until the next call to **initstate()** or **set-**
**state()**. *state* must first have been initialized using **init-**
**state()**.

## RETURN VALUE

The **random()** function returns a value between 0 and
RAND_MAX. The **srandom()** function returns no value. The
**initstate()** and **setstate()** functions return a pointer to the
previous state array.

## ERRORS

**EINVAL**
A state array of less than 8 bytes was specified to
**initstate()**.

## NOTES

Current "optimal" values for the size of the state array **n**
are 8, 32, 64, 128, and 256 bytes; other amounts will be
rounded down to the nearest known amount. Using less than 8
bytes will cause an error.

## CONFORMING TO

BSD 4.3

## SEE ALSO

**rand**(3), **srand**(3)