New Lagged Fib. PRNG gen and random2.d
Joseph Rushton Wakeling
joseph.wakeling at webdrake.net
Sun Aug 25 13:54:01 PDT 2013
On 25/08/13 22:30, bearophile wrote:
> Before being merged into Phobos someone has to measure a bit the actual quality
> of the random numbers it produces. To avoid problems like the ones had with
> Xorshift. There are suites and tools to measure the quality of random numbers,
> like a more modern version of the famous diehard.
Diehard is out of date. There's the Dieharder suite, and there's another by
Pierre L'Ecuyer and colleagues, TestU01:
http://www.phy.duke.edu/~rgb/General/dieharder.php
http://www.iro.umontreal.ca/~simardr/testu01/tu01.html
Dieharder is in the repositories of Debian/Ubuntu, and a first approximation of
a D random test suite is probably as simple as writing a D program that outputs
a sufficient quantity of random numbers, and piping them through to Dieharder.
It's on the TODO list but there have been too many other things going on
recently. :-P
By the way, the Xorshift problem didn't need a complicated test suite. This was
the code that showed up the problem:
writeln("Let's test the uniformity of random numbers produced with
different RNGs.");
size_t n = 1000_000;
foreach(Rng; PseudoRngTypes)
{
writeln("Generating ", n, " random numbers in [0, 1) with ", Rng.stringof);
auto rng = Rng(unpredictableSeed);
auto dist = Distribution(0.0, 100.0, 20);
foreach(i; 0 .. n)
{
dist.add(uniform(0.0, 100.0, rng));
}
foreach(bin, h, c; dist.distribution)
{
writeln("\t", bin, "\t", h, "\t", c);
}
writeln;
}
(A few data structures aren't described here, but you get the idea.)
The Xorshift problem only arose because the reference code was itself buggy.
For something like Lagged Fibonacci there are already good and battle-tested
implementations out there (e.g. Boost.Random) and a comparison of results for
the same seeds should be sufficient for inclusion.
More information about the Digitalmars-d
mailing list