
![]() | ![]() |
2.8. Making Numbers Even More Random
2.8.1. Problem
You want to generate numbers that are more random than Perl's random
numbers. Limitations of your C library's random number generator
seeds can sometimes cause problems. The sequence of pseudo-random
numbers may repeat too soon for some applications.
2.8.2. Solution
Use a
different random number generator, such as those provided by the
Math::Random and Math::TrulyRandom modules from CPAN:use Math::TrulyRandom;
$random = truly_random_value( );
use Math::Random;
$random = random_uniform( );
2.8.3. Discussion
The Perl build process tries to find the best C-library routine to
use for generating pseudo-random numbers, looking at
rand(3), random(3), and
drand48(3). (This can be changed manually at
build time, however.) The standard library functions are getting
pretty good, but some ancient implementations of the
rand function return only 16-bit random numbers or
have other algorithmic weaknesses, and may therefore not be
sufficiently random for your purposes.The Math::TrulyRandom module uses inadequacies of your system's
timers to generate the random numbers. This takes a while, so it
isn't useful for generating a lot of random numbers.The Math::Random module uses the randlib library
to generate random numbers. It also includes a wide range of related
functions for generating random numbers according to specific
distributions, such as binomial, poisson, and exponential.
2.8.4. See Also
The srand and rand functions in
perlfunc(1) and Chapter 29 of
Programming Perl; Recipe 2.6 and Recipe 2.7; the
documentation for the CPAN modules Math::Random and Math::TrulyRandom
![]() | ![]() | ![]() |
2.7. Generating Repeatable Random Number Sequences | ![]() | 2.9. Generating Biased Random Numbers |

Copyright © 2003 O'Reilly & Associates. All rights reserved.