To test my C ++ code, I would like Boost :: Random and Matlab to produce the same random numbers.
So, for Boost, I use the code:
boost::mt19937 var(static_cast<unsigned> (std::time(0))); boost::uniform_int<> dist(1, 6); boost::variate_generator<boost::mt19937&, boost::uniform_int<> > die(var, dist); die.engine().seed(0); for(int i = 0; i < 10; ++i) { std::cout << die() << " "; } std::cout << std::endl;
What produces (each program start):
4 4 5 6 4 6 4 6 3 4
And for matlab I use:
RandStream.setDefaultStream(RandStream('mt19937ar','seed',0)); randi(6,1,10)
What produces (each program start):
5 6 1 6 4 1 2 4 6 6
This is strange, since both use the same algorithm and the same seed. What am I missing?
It seems that Python (using numpy) and Matlab seems comparable in random homogeneous numbers: Matlab
RandStream.setDefaultStream (RandStream ('mt19937ar', 'seed', 203)); rand (1.10)
0.8479 0.1889 0.4506 0.6253 0.9697 0.2078 0.5944 0.9115 0.2457 0.7743
Python: random.seed (203); random.random (10)
array([ 0.84790006, 0.18893843, 0.45060688, 0.62534723, 0.96974765, 0.20780668, 0.59444858, 0.91145688, 0.24568615, 0.77430378])
C ++ boosts
0.8479 0.667228 0.188938 0.715892 0.450607 0.0790326 0.625347 0.972369 0.969748 0.858771
Which is identical to any other value of Python and Matlab ...