Provided by: manpages-dev_4.04-2_all

**NAME**

random, srandom, initstate, setstate - random number generator

**SYNOPSIS**

#include<stdlib.h>longintrandom(void);voidsrandom(unsignedintseed);char*initstate(unsignedintseed,char*state,size_tn);char*setstate(char*state);Feature Test Macro Requirements for glibc (seefeature_test_macros(7)):random(),srandom(),initstate(),setstate(): _SVID_SOURCE || _BSD_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED

**DESCRIPTION**

Therandom() function uses a nonlinear 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 toRAND_MAX. The period of this random number generator is very large, approximately16*((2^31)-1). Thesrandom() function sets its argument as the seed for a new sequence of pseudo-random integers to be returned byrandom(). These sequences are repeatable by callingsrandom() with the same seed value. If no seed value is provided, therandom() function is automatically seeded with a value of 1. Theinitstate() function allows a state arraystateto be initialized for use byrandom(). The size of the state arraynis used byinitstate() to decide how sophisticated a random number generator it should use—the larger the state array, the better the random numbers will be.seedis the seed for the initialization, which specifies a starting point for the random number sequence, and provides for restarting at the same point. Thesetstate() function changes the state array used by therandom() function. The state arraystateis used for random number generation until the next call toinitstate() orsetstate().statemust first have been initialized usinginitstate() or be the result of a previous call ofsetstate().

**RETURN** **VALUE**

Therandom() function returns a value between 0 andRAND_MAX. Thesrandom() function returns no value. Theinitstate() function returns a pointer to the previous state array. On error,errnois set to indicate the cause. On success,setstate() returns a pointer to the previous state array. On error, it returns NULL, witherrnoset to indicate the cause of the error.

**ERRORS**

EINVALThestateargument given tosetstate() was NULL.EINVALA state array of less than 8 bytes was specified toinitstate().

**ATTRIBUTES**

For an explanation of the terms used in this section, seeattributes(7). ┌────────────────────────┬───────────────┬─────────┐ │Interface│Attribute│Value│ ├────────────────────────┼───────────────┼─────────┤ │random(),srandom(), │ Thread safety │ MT-Safe │ │initstate(),setstate() │ │ │ └────────────────────────┴───────────────┴─────────┘

**CONFORMING** **TO**

POSIX.1-2001, POSIX.1-2008, 4.3BSD.

**NOTES**

Current "optimal" values for the size of the state arraynare 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. This function should not be used in cases where multiple threads userandom() and the behavior should be reproducible. Userandom_r(3) for that purpose. Random-number generation is a complex topic.NumericalRecipesinC:TheArtofScientificComputing(William H. Press, Brian P. Flannery, Saul A. Teukolsky, William T. Vetterling; New York: Cambridge University Press, 2007, 3rd ed.) provides an excellent discussion of practical random-number generation issues in Chapter 7 (Random Numbers). For a more theoretical discussion which also covers many practical issues in depth, see Chapter 3 (Random Numbers) in Donald E. Knuth'sTheArtofComputerProgramming, volume 2 (Seminumerical Algorithms), 2nd ed.; Reading, Massachusetts: Addison-Wesley Publishing Company, 1981.

**BUGS**

According to POSIX,initstate() should return NULL on error. In the glibc implementation,errnois (as specified) set on error, but the function does not return NULL.

**SEE** **ALSO**

drand48(3),getrandom(2),rand(3),random_r(3),srand(3)

**COLOPHON**

This page is part of release 4.04 of the Linuxman-pagesproject. A description of the project, information about reporting bugs, and the latest version of this page, can be found at http://www.kernel.org/doc/man-pages/.