[LC++]Random numbers
    Mark Phillips 
    mark at austrics.com.au
       
    Fri Aug 31 17:54:04 UTC 2001
    
    
  
Hi,
Doing "man 3 rand" on a linux system gives the following information
about random number generation:
       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, the lower-order bits are much less random
       than the higher-order bits.
       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 following 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)."
Is the comment from Numerical Recipes in C based on older versions
of rand()?  Ie is it that the first method above (of generating
a number between 1 and 10) used to be preferable to the second
method, but now with improved random number generators, the
second method is just as good --- (and quicker!)??
Thanks,
Mark.
    
    
More information about the tuxCPProgramming
mailing list