# initstate

## PROLOG



           This manual page is part of the POSIX Programmer's Manual.  The
           Linux implementation of this interface may differ (consult the
           corresponding Linux manual page for details of Linux behavior), or
           the interface may not be implemented on Linux.
    


## NAME



           initstate, random, setstate, srandom — pseudo-random number
           functions
    


## SYNOPSIS



           #include <stdlib.h>
    
           char *initstate(unsigned _seed_ , char *_state_ , size_t _size_);
           long random(void);
           char *setstate(char *_state_);
           void srandom(unsigned _seed_);
    


## DESCRIPTION



           The _random_() function shall use a non-linear 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 x (231-1). The size of the state array
           determines the period of the random-number generator. Increasing
           the state array size shall increase the period.
    
           With 256 bytes of state information, the period of the random-
           number generator shall be greater than 269.
    
           Like _rand_(), _random_() shall produce by default a sequence of
           numbers that can be duplicated by calling _srandom_() with 1 as the
           seed.
    
           The _srandom_() function shall initialize the current state array
           using the value of _seed_.
    
           The _initstate_() and _setstate_() functions handle restarting and
           changing 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, shall be 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. If _initstate_() is called with 8≤ _size_ <32, then _random_()
           shall use a simple linear congruential 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 shall return a pointer to the previous state
           information array.
    
           If _initstate_() has not been called, then _random_() shall behave as
           though _initstate_() had been called with _seed_ =1 and _size_ =128.
    
           Once a state has been initialized, _setstate_() allows switching
           between state arrays. The array defined by the _state_ argument
           shall be used for further random-number generation until
           _initstate_() is called or _setstate_() is called again. The
           _setstate_() function shall return a pointer to the previous state
           array.
    


## RETURN VALUE



           If _initstate_() is called with _size_ less than 8, it shall return
           NULL.
    
           The _random_() function shall return the generated pseudo-random
           number.
    
           The _srandom_() function shall not return a value.
    
           Upon successful completion, _initstate_() and _setstate_() shall
           return a pointer to the previous state array; otherwise, a null
           pointer shall be returned.
    


## ERRORS



           No errors are defined.
    
           _The following sections are informative._
    


## EXAMPLES



           None.
    


## APPLICATION USAGE



           After initialization, a state array can be restarted at a
           different point in one of two ways:
    
            1. The _initstate_() function can be used, with the desired seed,
               state array, and size of the array.
    
            2. The _setstate_() function, with the desired state, can be used,
               followed 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
           POSIX.1‐2008.
    
           Issue 5 restored the historical behavior of this function.
    
           Threaded applications should use _erand48_(), _nrand48_(), or
           _jrand48_() instead of _random_() when an independent random number
           sequence in multiple threads is required.
    
           These functions should be avoided whenever non-trivial
           requirements (including safety) have to be fulfilled.
    


## RATIONALE



           None.
    


## FUTURE DIRECTIONS



           None.
    


* * *