Normal/Gaussian random number generation for D

Joseph Rushton Wakeling joseph.wakeling at webdrake.net
Tue Oct 23 07:32:58 PDT 2012


On 10/23/2012 03:50 PM, bearophile wrote:
> Using the Boost API is useful. And using D-specific features/syntax is equally
> good.

Most of the existing std.random is based around the planned C++11 random API, 
which in turn derives from boost.  There are several ways in which D seems able 
to do things more elegantly, however ... :-)

> Using the Ziggurat algorithm is desired, otherwise people will have to implement
> it outside Phobos, because it's better if you have to generate many normal
> distributed values (and sometimes I need many of them). is it possible to have
> both algorithms? Maybe with a template argument?

Yes, that's exactly the plan.  You see how there is an "engine" template 
argument (NormalRandomNumberEngine) which is currently by default Box-Muller, 
but could be Ziggurat or others (Marsaglia etc.)  Other engines will be added 
later, Box-Muller is there as the first and easiest to implement.

The idea of a NormalRandomNumberEngine is that it is a struct which returns via 
opCall a number drawn from the distribution N(0, 1).  This is trivial to 
transform into N(mean, sigma).


More information about the Digitalmars-d mailing list