Different random output for Phobos and Boost

Joseph Rushton Wakeling joseph.wakeling at webdrake.net
Fri May 4 16:55:32 PDT 2012


Hello all,

I've started work on implementing some non-uniform random distributions for 
Phobos, as per earlier discussion:
http://forum.dlang.org/thread/mailman.2109.1335315882.4860.digitalmars-d@puremagic.com

Since the Phobos std.random architecture is derived strongly from the C++0X 
random number proposals, which in turn derive from Boost.Random, I've been 
comparing the output of the two and noticed that they do not give identical 
output for the same distributions and random seeds.

Compare e.g. the output of the following:

/// randist.d
import std.random, std.stdio;

void main()
{
     Mt19937 gen;
     gen.seed(1001);

     foreach(i; 0..10)
         writefln("%.51f", uniform!("[)", double, double)(0.0, 1.0, gen));
}
//////////////////

to this:

/// randist.cpp
#include <iostream>
#include <iomanip>
#include <boost/random.hpp>

using namespace std;
using namespace boost;

int main(void)
{
       mt19937 gen;
       gen.seed(1001);
       uniform_real<double> dist(0.0, 1.0);
       variate_generator<mt19937&, uniform_real<double> > vargen(gen, dist);
       for(size_t i=0; i<10; ++i) {
             double x = vargen();
             cout << i << "\t" << std::setprecision(51) << x << endl;
       }

       return 0;
}
//////////////////

I find that the generated numbers diverge after about the 8th or 9th decimal place.

So -- just asking -- should we care?  And if we should, any ideas about what 
might be responsible?

Thanks & best wishes,

     -- Joe


More information about the Digitalmars-d mailing list