Unix/Linux Go Back    


BSD 2.11 - man page for initstate (bsd section 3)

Linux & Unix Commands - Search Man Pages
Man Page or Keyword Search:   man
Select Man Page Set:       apropos Keyword Search (sections above)


RANDOM(3)										RANDOM(3)

NAME
       random, srandom, initstate, setstate - better random number generator; routines for chang-
       ing 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
       Random uses a non-linear additive feedback random number generator employing a default ta-
       ble  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).

       Random/srandom  have  (almost)  the same calling sequence and initialization properties as
       rand/srand.  The difference is that rand(3) produces a much less  random  sequence  --  in
       fact, the low dozen bits generated by rand go through a cyclic pattern.	All the bits gen-
       erated by random are usable.  For example, ``random()&01'' will produce	a  random  binary
       value.

       Unlike srand, srandom does not return the old seed; the reason 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 generators).  Like rand(3), however,
       random will by default produce a sequence of numbers that can  be  duplicated  by  calling
       srandom with 1 as the seed.

       The  initstate  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 initstate 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.  Initstate returns  a  pointer  to  the
       previous state information array.

       Once  a	state  has  been  initialized,	the setstate routine provides for rapid switching
       between states.	Setstate returns a pointer to the  previous  state  array;  its  argument
       state  array is used for further random number generation until the next call to initstate
       or setstate.

       Once a state array has been initialized, it may be restarted at a different  point  either
       by  calling initstate (with the desired seed, the state array, and its size) or by calling
       both setstate (with the state array) and srandom (with the desired seed).   The	advantage
       of  calling both setstate and srandom 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 random number generator is  greater
       than 2**69 which should be sufficient for most purposes.

AUTHOR
       Earl T. Cohen

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

SEE ALSO
       rand(3)

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

4.2 Berkeley Distribution		September 29, 1985				RANDOM(3)
Unix & Linux Commands & Man Pages : ©2000 - 2018 Unix and Linux Forums


All times are GMT -4. The time now is 11:54 PM.