Making Numbers Even More Random
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 will sometimes cause problems. The sequence of pseudo-random numbers may repeat too soon for some applications.
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();
Discussion
Perl uses the standard C library routine rand(3) to generate pseudo-random numbers. (This can be changed at build
time, however.) Some implementations of the rand
function return only 16-bit random numbers or have algorithmic
weaknesses and may not be sufficiently random.
The Math::TrulyRandom module uses the 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.
See Also
The srand
and rand
functions in
perlfunc(1) and Chapter 3 of
Programming Perl; Section 2.7; Section 2.8; the
documentation for the CPAN modules Math::Random and Math::TrulyRandom
Get Perl Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.