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.digitalmar...@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

Reply via email to