next up previous

2 Introduction to Pseudorandom Numbers     continued...

Indeed, all random number generators are based upon specific mathematical algorithms, which are repeatable and sequential. As such, the numbers are just pseudorandom. Here, for simplicity, we shall term them just ``random'' numbers, subject to this realization. Formally,

Truly random - is defined as exhibiting ``true'' randomness, such as the time between ``tics'' from a Geiger counter exposed to a radioactive element.

Pseudorandom - is defined as having the appearance of randomness, but nevertheless exhibiting a specific, repeatable pattern.

Quasi-random - is defined as filling the solution space sequentially (in fact, these sequences are not at all random - they are just comprehensive at a preset level of granularity). For example, consider the integer space [0, 100]. One quasi-random sequence which fills that space is 0, 1, 2,...,99, 100. Another is 100, 99, 98,...,2, 1, 0. Yet a third is 23, 24, 25,..., 99, 100, 0, 1,..., 21, 22. Pseudorandom sequences which would fill the space are pseudorandom permutations of this set (they contain the same numbers, but in a different, ``random'' order).

As Monte Carlo simulations have been developed on computers since their inception, methods of generating and dealing with random numbers are fairly well established. As literally millions or even billions of random numbers are required in a large-scale simulation, the process should ideally be very efficient. Indeed, many random number generator routines are written in assembly language for this reason. Sometimes, random number routines are even put ``in line'' to avoid the overhead associated with subroutine calls. Often on vector and/or parallel computers, blocks of random numbers are generated to amortize, over many random numbers, the overhead associated with the generation of one random number. It is noteworthy that the FORTRAN 90 ANSI standard is the first one to identify a random number generator in the ANSI specification of the language! Hitherto, it has existed only as an extension to the FORTRAN standard.