4.3BSD-UWisc/man/cat3/random.3

Compare this file to the similar file:
Show the results in this format:




RANDOM(3)           UNIX Programmer's Manual            RANDOM(3)



NAME
     random, srandom, initstate, setstate - better random number
     generator; routines for changing generators

SYNOPSIS
     long random()

     srandom(seed)
     int seed;

     char *initstate(seed, state, n)
     unsigned seed;
     char *state;
     int n;

     char *setstate(state)
     char *state;

DESCRIPTION
     _R_a_n_d_o_m 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 (2**31)-1.  The period of this random number generator
     is very large, approximately 16*((2**31)-1).

     _R_a_n_d_o_m/_s_r_a_n_d_o_m have (almost) the same calling sequence and
     initialization properties as _r_a_n_d/_s_r_a_n_d. The difference is
     that _r_a_n_d(3) 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 _r_a_n_d_o_m are usable.  For
     example, ``random()&01'' will produce a random binary value.

     Unlike _s_r_a_n_d, _s_r_a_n_d_o_m does not return the old seed; the rea-
     son for this is that the amount of state information used is
     much more than a single word.  (Two other routines are pro-
     vided to deal with restarting/changing random number genera-
     tors).  Like _r_a_n_d(3), however, _r_a_n_d_o_m will by default pro-
     duce a sequence of numbers that can be duplicated by calling
     _s_r_a_n_d_o_m with _1 as the seed.

     The _i_n_i_t_s_t_a_t_e routine allows a state array, passed in as an
     argument, to be initialized for future use.  The size of the
     state array (in bytes) is used by _i_n_i_t_s_t_a_t_e to decide how
     sophisticated a random number generator it should use -- the
     more state, the better the random numbers will be.  (Current
     "optimal" values for the amount of state information 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).  The seed for the initialization
     (which specifies a starting point for the random number
     sequence, and provides for restarting at the same point) is
     also an argument.  _I_n_i_t_s_t_a_t_e returns a pointer to the



Printed 12/27/86       September 29, 1985                       1






RANDOM(3)           UNIX Programmer's Manual            RANDOM(3)



     previous state information array.

     Once a state has been initialized, the _s_e_t_s_t_a_t_e routine pro-
     vides for rapid switching between states.  _S_e_t_s_t_a_t_e returns
     a pointer to the previous state array; its argument state
     array is used for further random number generation until the
     next call to _i_n_i_t_s_t_a_t_e or _s_e_t_s_t_a_t_e.

     Once a state array has been initialized, it may be restarted
     at a different point either by calling _i_n_i_t_s_t_a_t_e (with the
     desired seed, the state array, and its size) or by calling
     both _s_e_t_s_t_a_t_e (with the state array) and _s_r_a_n_d_o_m (with the
     desired seed).  The advantage of calling both _s_e_t_s_t_a_t_e and
     _s_r_a_n_d_o_m is that the size of the state array does not have to
     be remembered after it is initialized.

     With 256 bytes of state information, the period of the ran-
     dom number generator is greater than 2**69 which should be
     sufficient for most purposes.

AUTHOR
     Earl T. Cohen

DIAGNOSTICS
     If _i_n_i_t_s_t_a_t_e is called with less than 8 bytes of state
     information, or if _s_e_t_s_t_a_t_e detects that the state informa-
     tion has been garbled, error messages are printed on the
     standard error output.

SEE ALSO
     rand(3)

BUGS
     About 2/3 the speed of _r_a_n_d(3C).





















Printed 12/27/86       September 29, 1985                       2