Various types of pseudo random number generators have been subjected to the Diehard battery of
randomness tests. These tests were devised by George Marsaglia. He created a program that performs
many tests on a file with bytes created by a generator and reports on the results. This program and
documentation can be downloaded at:
http://stat.fsu.edu/pub/diehard
The results of these tests on files of 11 MB created by the generators are summarized below. Refer to
the link for a description of each test. A generator is deemed to have passed the test if the resulting
p-values are uniformly distributed between 0 and 1, with no p-values equal to either 0 or 1 (to 5
significant digits).
Randomness Test | 24-bit LCG | 32-bit MWC | 64-bit LCG | 10^15 LCG | XLCG | Combo |
Birthday Spacings | Fail | Pass | Pass | Pass | Pass | Pass |
Overlapping 5-Permutation | Fail | Pass | Pass | Fail | Marginal | Pass |
Binary Rank | Pass | Pass | Pass | Pass | Pass | Pass |
Binary Rank for 6x8 Matrices | Fail | Pass | Fail | Fail | Pass | Pass |
Bitstream (Monkey Test) | Fail | Pass | Pass | Pass | Pass | Pass |
OPSO | Fail | Pass | Pass | Fail | Pass | Pass |
OQSO | Fail | Pass | Fail | Fail | Fail | Pass |
DNA | Fail | Pass | Fail | Fail | Pass | Pass |
Count-the-1's on Stream of Bytes | Fail | Pass | Pass | Fail | Pass | Pass |
Count-the-1's for Specific Bytes | Fail | Pass | Fail | Fail | Fail | Pass |
Parking Lot | Fail | Pass | Pass | Fail | Pass | Pass |
Minimum Distance | Fail | Pass | Pass | Marginal | Pass | Pass |
3D Spheres | Pass | Pass | Pass | Pass | Pass | Pass |
Squeeze | Fail | Pass | Pass | Fail | Pass | Pass |
Overlapping Sums | Fail | Pass | Pass | Marginal | Pass | Pass |
Runs | Pass | Pass | Pass | Pass | Pass | Pass |
Craps | Pass | Pass | Pass | Pass | Pass | Pass |
The 24-bit LCG is the generator used by the VBScript Rnd function. This generator does very poorly on
the tests. The 64-bit LCG generator did better than a 32-bit LCG, but still failed several of the tests.
The XLCG is an Extended Linear Congruential Generator with a period of about 2^96. The 10^15 LCG is a
Linear Congruential Generator with a modulus of 10^15. It did surprisingly poorly. All MWC (Multiply
With Carry) generators tested have passed all of the tests. The Combo generator combines 12 Multiply
With Carry generators and also passes all tests.
For each generator, a VBScript program was written to produce pseudo random integers from the generator.
Each generator was maximal length. Then the program was modified to convert the integers to bytes and
write them to a file. 11 MB of bytes were written to the file. Then the Diehard battery of tests were
run on the file.