
Steven, Thank you so much! Your code works perfectly, In case it would be useful to reproduce my previous (wrong) results I'm sending the full code bellow. I used gcc to compile it. #include <iostream> #include "boost/random.hpp" using namespace std; boost::mt19937 gen; extern "C" __declspec(dllexport) double normalSeed(double mean, double sigma, uint32_t x){ boost::normal_distribution<> normal(mean,sigma); boost::variate_generator<boost::mt19937&,boost::normal_distribution<>
rng(gen, normal); rng.engine().seed(x); rng.distribution().reset(); return rng(); }
int main() { cout.precision (10); cout << "\nBoost::Random Test, 0.12e" << endl; boost::normal_distribution<> normal(0,1); boost::variate_generator<boost::mt19937 &,boost::normal_distribution<> > rng(gen, normal); cout << rng() << endl; cout << rng() << endl; cout << rng() << endl; cout << "Function call seed(0)\n" << normalSeed(0, 1, 0) << endl; cout << rng() << endl; cout << rng() << endl; cout << rng() << endl; cout << "Function call seed(1)\n" << normalSeed(0, 1, 1) << endl; cout << rng() << endl; cout << rng() << endl; cout << rng() << endl; return 0; } 2011/1/28 Steven Watanabe <watanabesj@gmail.com>:
AMDG
On 1/27/2011 7:10 PM, Anton Skvorts wrote:
Oh, although the code was run with just one variate_generator, I transcribed in my post one line of the code erroneously:
where is die(gen, normal) it should be rng(gen, normal)
Anyway I got that strange output using just one variate_generator everywhere: variate_generator<std::mt19937&,std::normal_distribution<> > rng(gen, normal);
Steven, does your comment still applies in this case?
I can't reproduce your problem. Here's the code I tested with
#include <boost/random/mersenne_twister.hpp> #include <boost/random/normal_distribution.hpp> #include <boost/random/variate_generator.hpp> #include <iostream>
using namespace std;
template<class G, class T> void reseed(G& gen, const T& t) { gen.engine().seed(t); gen.distribution().reset(); }
int main() { boost::mt19937 gen; boost::normal_distribution<> normal(0,1); boost::variate_generator< boost::mt19937 &, boost::normal_distribution<> > rng(gen, normal); cout << rng() << endl; cout << rng() << endl; cout << rng() << endl; reseed(rng, 0); cout << rng() << endl; cout << rng() << endl; cout << rng() << endl; cout << rng() << endl; reseed(rng, 1); cout << rng() << endl; cout << rng() << endl; cout << rng() << endl; cout << rng() << endl; }
In Christ, Steven Watanabe _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost