digitalmars.D - Different random output for Phobos and Boost
- Joseph Rushton Wakeling (44/44) May 04 2012 Hello all,
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
May 04 2012