RANDU


RANDU is a linear congruential pseudorandom number generator of the Park–Miller type, which has been used since the 1960s. It is defined by the recurrence:
with the initial seed number, as an odd number. It generates pseudorandom integers which are uniformly distributed in the interval, but in practical applications are often mapped into pseudorandom rationals in the interval, by the formula:
IBM's RANDU is widely considered to be one of the most ill-conceived random number generators ever designed, and was described as "truly horrible" by Donald Knuth. It fails the spectral test badly for dimensions greater than 2, and every integer result is odd. However, at least eight low-order bits are dropped when converted to single-precision floating-point.
The reason for choosing these particular values is that with a 32-bit-integer word size, the arithmetic of mod 231 and calculations could be done quickly, using special features of some computer hardware.

Problems with multiplier and modulus

In general, when an LCG with modulus 231 is used to produce points in 3-dimensional space, the points fall into no more than 2,344 parallel planes, a result which indicates an LCG is unsuitable for Monte Carlo simulation. Choice of multiplier determines the number of planes. To show the problem with the values of multiplier 65539 and modulus 231 chosen for RANDU, consider the following calculation where every term should be taken mod 231. Start by writing the recursive relation as:
which becomes, after expanding the quadratic factor:
and allows us to show the correlation between three points as:
As a result of this correlation, each point lies in one of a set of parallel planes 231 apart, 15 of which intersect the 231 x 231 x 231 cube containing the points. As a result of the wide use of RANDU in the early 1970s, many results from that time are seen as suspicious.
This misbehavior was already detected in 1963 on a 36-bit computer, and carefully reimplemented on the 32-bit IBM System/360. It was believed to have been widely purged by the early 1990s but there were still FORTRAN compilers using it as late as 1999.

Sample output

The start of the RANDU's output period for the initial seed is: