Recipe 2.9. Making Numbers Even More Random
Author: Tom Christiansen & Nathan Torkington
Date: 1999-07-02T01:30:13Z

#

| Chapter 2 Numbers |

## 2.9. 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; Recipe 2.7; Recipe 2.8; the documentation for the CPAN modules Math::Random and Math::TrulyRandom

2.8. Generating Different Random Numbers |  | 2.10. Generating Biased Random Numbers