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