NAME        rand, rand_r, srand - pseudo-random number generator  SYNOPSIS        #include <stdlib.h>         int rand(void);         int rand_r(unsigned int *seedp);         void srand(unsigned int seed);  DESCRIPTION        The  rand()  function  returns  a  pseudo-random  integer between 0 and        RAND_MAX.         The srand() function sets its argument as the seed for a  new  sequence        of  pseudo-random  integers  to be returned by rand().  These sequences        are repeatable by calling srand() with the same seed value.         If no seed value is provided,  the  rand()  function  is  automatically        seeded with a value of 1.         The function rand() is not reentrant or thread-safe, since it uses hid-        den state that is modified on each call. This might just  be  the  seed        value to be used by the next call, or it might be something more elabo-        rate. In order to get reproducible behaviour in a threaded application,        this  state  must  be  made explicit. The function rand_r() is supplied        with a pointer to an unsigned int, to be used as state.  This is a very        small  amount  of  state, so this function will be a weak pseudo-random        generator. Try drand48_r(3) instead.  RETURN VALUE        The rand()  and  rand_r()  functions  return  a  value  between  0  and        RAND_MAX.  The srand() function returns no value.  EXAMPLE        POSIX.1-2001 gives the following example of an implementation of rand()        and srand(), possibly useful when one needs the same  sequence  on  two        different machines.             static unsigned long next = 1;             /* RAND_MAX assumed to be 32767 */            int myrand(void) {                next = next * 1103515245 + 12345;                return((unsigned)(next/65536) % 32768);            }             void mysrand(unsigned seed) {                next = seed;            }  NOTES        The  versions of rand() and srand() in the Linux C Library use the same        random number generator as random() and srandom(), so  the  lower-order        bits  should  be as random as the higher-order bits.  However, on older        rand() implementations, and on  current  implementations  on  different        systems,  the  lower-order  bits  are much less random than the higher-        order bits.  Do not use this function in applications  intended  to  be        portable when good randomness is needed.         In  Numerical Recipes in C: The Art of Scientific Computing (William H.        Press, Brian P. Flannery, Saul A. Teukolsky, William T. Vetterling; New        York:  Cambridge University Press, 1992 (2nd ed., p. 277)), the follow-        ing comments are made:               "If you want to generate a random integer between 1 and 10,  you               should always do it by using high-order bits, as in                       j = 1 + (int) (10.0 * (rand() / (RAND_MAX + 1.0)));                and never by anything resembling                       j = 1 + (rand() % 10);                (which uses lower-order bits)."         Random-number  generation is a complex topic.  The Numerical Recipes in        C book (see reference above) provides an excellent discussion of  prac-        tical 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's        The  Art  of Computer Programming, volume 2 (Seminumerical Algorithms),        2nd ed.; Reading,  Massachusetts:  Addison-Wesley  Publishing  Company,        1981.  CONFORMING TO        The  functions  rand()  and  srand() conform to SVr4, 4.3BSD, C89, C99,        POSIX.1-2001.  The function rand_r() is from POSIX.1-2001.  SEE ALSO        drand48(3), random(3)
   |