| About this Page |
This page is maintained by Peter
Hellekalek.
On this page, you will find links to free software for random
number generation and testing,
for Monte Carlo and quasi-Monte Carlo applications and for cryptography.
Further information on RNGs is available on our Generators and on our Links/Cryptographic Random Numbers pages.
For statistical tests,
we would like to point to our Tests page.
|
| Personal Recommendation |
In my opinion, the state of the art is like this:
- If you need splitting facilities for your generator,
for example in parallel simulation,
then use the RNG by L'Ecuyer et al. (2002; see below),
- if you do not need these splitting facilities,
then use the excellent RNGs of Matsumoto et al. (see TT800 and
Mersenne Twister below), or the Well-generators
(see
Panneton, P. L'Ecuyer, and M. Matsumoto, ``Improved Long-Period Generators Based on Linear Recurrences Modulo 2'', ACM Transactions on Mathematical Software, 32, 1 (2006), 1-16,
or one of Li-Yuan Deng's huge RNGs.
- if you need to employ an efficient
nonlinear RNG, then use AES in counter mode (see my joint paper
with Wegenkittl below) or some good stream cipher (see below),
-
if you need to test (hardware or software) RNGs,
then use the TESTU01
battery of
Pierre L'Ecuyer and Richard Simard (Montreal University, Canada)
and, finally,
- if you need nonuniform
random variates, turn to the
ANURAN-UNURAN package of Leydold
et al. referenced below (google also for "ARVAG" - Automatic Nonuniform Random
Variate Generation).
For all those references,
there is code available from the authors.
Please note that this is a highly personal choice and that there are other
good generators around.
I have tried to select those algorithms or packages which
come with strong theoretical support and which are state of the art.
|
| Nonlinear RNGs from Cryptography |
As for cryptographic random number generators,
we would like to point the reader to the
eSTREAM
project for code and cryptanalysis of various stream ciphers,
and to
AES
as a random number generator.
All those RNGs are nonlinear and trimmed for efficiency.
|
| AES as a Random Number Generator |
There are the fast and reliable RNGs of Matsumoto
(TT800 and Mersenne Twister), there are the equally fast and
reliable RNGs of L'Ecuyer et al., but there has been no nonlinear
RNG available that has both a huge period length and is numerically
efficient at the same time. This situation has changed: simply
use AES in counter mode. There is numerical evidence available
that this is a good RNG: pLab members Stefan
Wegenkittl and Peter
Hellekalek have tested AES, the advanced encryption standard,
in random generator modes. The results were convincing, the
paper is available
online from our ftp server. This paper also contains a discussion
of Maurer's Universal Statistical Test. |
| RNG Code with Splitting |
If you want to generate random numbers in parallel
or need several streams of random numbers at once: read the
P. L'Ecuyer, R. Simard, E. J. Chen, and W. D. Kelton,
``An Objected-Oriented Random-Number Package with Many Long
Streams and Substreams'', Operations Research, 50, 6 (2002),
1073--1075. The code in C, C++, Java, and FORTRAN: is available
from
L'Ecuyer's webpage (see his list of publications).
|
| Spectral Test Server |
Our Spectral
Test Server is available. The spectral test is the most
powerful practical figure of merit for linear types of random
number generators. It allows to check for correlations between
random numbers in the output stream of a random number generator,
provided that the generation is done with an appropriate (linear)
algorithm. |
AES Implementation in C++
|
pLab member Gerhard
Wesp has implemented Rijndael, in other words, the Advanced
Encryption Standard AES,
in C++. The implementation is available via the Rijndael
home page |
Otmar Lendl's package for
LCGs, ICGs, EICGs, and other RNGs
|
pLab member Otmar Lendl has created
portable, high-performance ANSI-C implementations of linear
congruential, inversive congruential, and explicit inversive
congruential random number generators (called LCG, ICG and EICG,
respectively). The source-code is available in tar-ed or zip-ed
format. |
Makoto Matsumoto's Huge RNGs
|
Extremely fast and reliable RNGs are available
from Makoto Matsumoto, see TT800
and the Mersenne
Twister (MT). Many specialists in the field of random number
generation consider MT as one of the current champions,
i.e. one of the best RNGs available for stochastic simulation. |
Nonuniform Random Numbers
|
Josef Leydold and Wolfgang Hoermann of the University
of Economics Vienna have written a library of functions to generate
non-uniform random numbers called UNURAN.
Together with the uniform RNGs discussed above, a practitioner
will be able to work with state-of-the-art algorithms. |
Nonuniform Random Numbers
with Lipschitz densities
|
Gleb Beliakov offers
RanLip,
a universal nonuniform random variate generator
for Lipschitz-continous densities.
RanLip generates random variates with an arbitrary mutlivariate
Lipschitz density.
Downloads are available for Unix/Linux and Windows. |
Statistical Tests
|
There are two established test batteries,
the famous
DIEHARD battery
of George Marsaglia,
and the NIST battery
of the National Institute of Standards and Technology. |
More Software
|
More links to software are available on our Random
Numbers and Monte Carlo Methods page, which is part of the
WWW Virtual Library |