std.random and mersenne twister

Joseph Rushton Wakeling joseph.wakeling at webdrake.net
Fri Jul 20 06:54:45 PDT 2012


On 20/07/12 14:51, Andrea Fontana wrote:
> He also developed the "Marsiglia's Theorem" where he demonstrate that LCG (that
> is the default algorithm for many languages  for ex: glibc and vc++ lib, ...)
> has big issues.

C and C++ have the bad luck to have been created before many of the high-quality 
PRNGs were developed.  A lot of scientific software now has MT as the default. 
I'd personally never heard of CMWC before this email exchange -- a nice 
discovery :-)

> MT has a complex implementation, I hope std.random MT was tested :)

I doubt there's anything wrong with the MT implementation per se; it looks 
largely like a close match to that in the Boost C++ random library, and they 
certainly generate identical output.  There is an issue with the seeding, that 
D's MT can only take a number as seed, not a sequence of numbers -- see:
http://forum.dlang.org/thread/jr0luj$1ctj$1@digitalmars.com

But I agree that there should be a proper set of unittests for the PRNGs that 
really check their implementation.

Personally if there is a flaw in the current D random number generation, my 
money would be on the unpredictableSeed being responsible.  It's a hunch rather 
than something I can justify technically, but the method of generating that seed 
looks too simple to me -- I'd be worried that for some PRNGs, different threads 
might wind up with correlated random sequences by accident, because the 
different unpredictableSeeds would not be different enough.

So, given that D looks to be gaining traction in various areas of scientific 
simulation, I think it'd be well worth trying to make sure that multithreaded 
pseudo-random number generation is really rigorously tested.  Unfortunately I 
don't know what kinds of test would be appropriate here.


More information about the Digitalmars-d mailing list