|
Boost Users : |
Subject: [Boost-users] boost::random: get same number sequences 32/64 bit?
From: Sebastian Mach (phresnel_at_[hidden])
Date: 2010-01-31 12:04:54
Hello list,
today I found out that boost::random, at least the combination
boost::mt19937 rng(<seed>);
typedef boost::uniform_int<int> dist_t;
dist_t dist (<min>, <max>);
boost::variate_generator<
boost::mt19937&,
dist_t
> rand_ (rng, dist);
will give me different results depending on whether I use "g++ (Debian
4.3.2-1.1) 4.3.2" (with sizeof(long)=8) or "g++.exe (TDM-2 mingw32)
4.4.1" (with sizeof(long)=4).
This testcase:
++
#include <boost/random.hpp>
boost::mt19937 rng(1);
typedef boost::uniform_int<int> dist_t;
dist_t dist (0, 16);
boost::variate_generator<
boost::mt19937&,
dist_t
> rand_ (rng, dist);
int main () {
for (int i=0; i<6; ++i) {
std::cout << rand_() << std::endl;
}
}
-- will print 16 8 1 6 0 12 with the 64bit variant variant, but 7 16 12 15 0 2 with the 32bit variant. Is there a (preferably portable) way to ensure that they will be the same on all 32bit+ machines? Otherwise this would be a real stopper to use boost::random for me, and I'd have to go back to libcoyotl's Mersenne Twister, which gives consistent results, upon which I really depend. Sincerely Sebastian Mach phresnel_at_[hidden]
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net