Uniform random number generator

Compiled and "slightly" modified by Paul Bourke
Original: December 1990
Updated: March 1998

The generation of random numbers is too important to be left to chance.


The library is made up of two files

Some simple test programs

Contribution by Stan Reckard

These let one move forward or backward along the random number sequence: reckard.c

Contribution by Mark Sheeky: Random.cpp

The following is the original description of the algorithm for the uniform random number generator.
For more details see the source code.

This Random Number Generator is based on the algorithm in a FORTRAN version published by George Marsaglia and Arif Zaman, Florida State University.

At the fhw (Fachhochschule Wiesbaden, W.Germany), Dept. of Computer Science, we have written sources in further languages (C, Modula-2 Turbo-Pascal(3.0, 5.0), Basic and Ada) to get exactly the same test results compared with the original FORTRAN version.

This random number generator originally appeared in "Toward a Universal Random Number Generator" by George Marsaglia and Arif Zaman. Florida State University Report: FSU-SCRI-87-50 (1987) It was later modified by F. James and published in "A Review of Pseudo- random Number Generators"

THIS IS THE BEST KNOWN RANDOM NUMBER GENERATOR AVAILABLE.

It passes ALL of the tests for random number generators and has a period of 2^144, is completely portable (gives bit identical results on all machines with at least 24-bit mantissas in the floating point representation).

The algorithm is a combination of a Fibonacci sequence (with lags of 97 and 33, and operation "subtraction plus one, modulo one") and an "arithmetic sequence" (using subtraction).


The following is the header and credits for the Gaussian distributed random samples.
For more details see the source code.

ALGORITHM 712, COLLECTED ALGORITHMS FROM ACM.
THIS WORK PUBLISHED IN TRANSACTIONS ON MATHEMATICAL SOFTWARE,
VOL. 18, NO. 4, DECEMBER, 1992, PP. 434-435.

The function returns a normally distributed pseudo-random number with zero mean and unit variance. Calls are made to a function subprogram which must return independent random numbers uniform in the interval (0,1).

The algorithm uses the ratio of uniforms method of A.J. Kinderman and J.F. Monahan augmented with quadratic bounding curves.