random(3) (BSD Compatibility Package) random(3)
NAME
random, srandom, initstate, setstate - pseudo-random number functions
SYNOPSIS
/usr/ucb/cc [flag ...] file ... -lucb
#include <stdlib.h>
long random(void);
void srandom(unsigned int seed);
char *initstate(unsigned int seed, char *state, sizet size);
char *setstate(const char *state);
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
(2^31)-1. The period of this random-number generator is approximately
16*((2^31)-1). The size of the state array determines the period of
the random-number generator. Increasing the state array size increases
the period.
With 256 bytes of state information, the period of the random-number
generator is greater than 2^69.
Like rand(), random() produces by default a sequence of numbers that
can be duplicated by calling srandom() with 1 as the seed.
The srandom() function initializes the current state array using the
value of seed.
The initstate() and setstate() functions handle restarting and chang-
ing random-number generators. The initstate() function allows a state
array, pointed to by the state argument, to be initialized for future
use. The size argument, which specifies the size in bytes of the state
array, is used by initstate() to decide what type of random-number
generator to use; the larger the state array, the more random the
numbers. Values for the amount of state information are 8, 32, 64,
128, and 256 bytes. Other values greater than 8 bytes are rounded down
to the nearest one of these values. For values greater than or equal
to 8 or less than 32, random() uses a simple linear congruent random-
number generator. The seed argument specifies a starting point for the
random-number sequence and provides for restarting at the same point.
The initstate() function returns a pointer to the previous state
information array.
If initstate() has not been called, then random() behaves as though
initstate() had been called with seed = 1 and size = 128.
Page 1 Reliant UNIX 5.44 Printed 11/98
random(3) (BSD Compatibility Package) random(3)
If initstate() is called with size >= 8 and < 32, then random() uses a
simple linear congruent random-number generator.
Once a state has been initialized, setstate() allows switching between
state arrays. The array defined by the state argument is used for
further random-number generation until initstate() is called or set-
state() is called again. The setstate() function returns a pointer to
the previous state array.
EXAMPLE
/* Initialize an array and pass it in to initstate. */
static long state1[32] = {
3,
0x9a319039, 0x32d9c024, 0x9b663182, 0x5da1f342,
0x7449e56b, 0xbeb1dbb0, 0xab5c5918, 0x946554fd,
0x8c2e680f, 0xeb3d799f, 0xb11ee0b7, 0x2d436b86,
0xda672e2a, 0x1588ca88, 0xe369735d, 0x904f35f7,
0xd7158fd6, 0x6fa6f051, 0x616e6b96, 0xac94efdc,
0xde3b81e0, 0xdf0a6fb5, 0xf103bc02, 0x48f340fb,
0x36413f93, 0xc622c298, 0xf5a42ab8, 0x8a88d77b,
0xf5ad9d0e, 0x8999220b, 0x27fb47b9
};
main()
{
unsigned seed;
int n;
seed = 1;
n = 128;
initstate(seed, state1, n);
setstate(state1);
printf("%d0,random());
}
RETURN VALUE
The random() function returns the generated pseudo-random number.
The srandom() function returns no value.
Upon successful completion, initstate() and setstate() return a
pointer to the previous state array. Otherwise, a null pointer is
returned.
If initstate() is called with size less than 8, it returns NULL.
ERRORS
No errors are defined.
Page 2 Reliant UNIX 5.44 Printed 11/98
random(3) (BSD Compatibility Package) random(3)
APPLICATION USAGE
After initialization, a state array can be restarted at a different
point in one of two ways:
- The initstate() function can be used, with the desired seed, state
array, and size of the array.
- The setstate() function, with the desired state, can be used, fol-
lowed by srandom() with the desired seed. The advantage of using
both of these functions is that the size of the state array does
not have to be saved once it is initialized.
Although some implementations of random() have written messages to
standard error, such implementations do not conform to this descrip-
tion.
SEE ALSO
drand48(3C), rand(3C), srand(3C), stdlib(5).
Page 3 Reliant UNIX 5.44 Printed 11/98