IPB
>  Man Pages > Linux > Suse Linux 10.1 > Section 3 > srand man page

srand man page

Section 3 - Suse Linux 10.1 Man Pages

Other operating system man pages available here


Advanced Search

Hopefully, this page is exactly what you are looking for, but if not, you can always find further assistance on Unix/Linux Forum!


RAND(3)                    Linux Programmer's Manual                   RAND(3)




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  1003.1-2003  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, please see Chapter 3 (Random  Numbers)  in  Donald  E.
       Knuth's  The Art of Computer Programming, volume 2 (Seminumerical Algo-
       rithms), 2nd ed.;  Reading,  Massachusetts:  Addison-Wesley  Publishing
       Company, 1981.


CONFORMING TO

       The  functions  rand() and srand() conform to SVID 3, 4.3BSD, ISO 9899,
       POSIX 1003.1-2003.  The function rand_r() is from POSIX 1003.1-2003.


SEE ALSO

       drand48(3), random(3)



                                  2003-11-15                           RAND(3)


Man(1) output converted with man2html and wrapped by fishsponge

This page was generated on Tue Feb 13 02:21:16 GMT 2007

Your favourite pages:

No pages logged yet.
Trying to save cookie...

Top 10 most popular pages:

sqlite3 man page (5323 hits)
(openSUSE 10.2)

svn man page (5173 hits)
(FreeBSD 6.2)

adv_cap_autoneg man page (4865 hits)
(Solaris 10 11_06)

CPAN man page (4602 hits)
(Suse Linux 10.1)

ssh man page (4337 hits)
(Suse Linux 10.1)

ssh-socks5-proxy-connect man page (2843 hits)
(Solaris 10 11_06)

netcat man page (2689 hits)
(Suse Linux 10.1)

pprosetup man page (2473 hits)
(Solaris 10 11_06)

startproc man page (2456 hits)
(Suse Linux 10.1)

signal man page (2395 hits)
(Suse Linux 10.1)

Useful Links

Go Back

Visitor Statistics


Valid XHTML 1.0 Transitional     Valid CSS!

Partners: Cambridge Plus :: PYRENEES GOLF HOLIDAYS :: Analogue Circuit Design :: <Link Available>
Unix Man Pages / Linux Man Pages :: HiFi Forum :: SIP VoIP Phone & Provider Reviews :: UNIX/Linux Forum Archives

More info on advertising on Unix/Linux Forum