According to: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1452.html [quote] A uniform_real random distribution produces floating-point random numbers x in the range min <= x <= max, with equal probability. min and max are the parameters of the distribution. [/unqoute] Following code (with either -std=c++0x or -std=gnu++0x): #include <tr1/random> #include <iostream> int main() { std::tr1::mt19937 e; std::tr1::uniform_real<double> dist(0.0, 1.0); std::cout << dist(e) << std::endl; return 0; } Produces: 3.49921e+09. It should produce a value between [0.0, 1.0). Not some wild int.
Update. Following code produces the correct value: #include <functional> #include <random> #include <iostream> int main() { typedef std::mt19937 eng_t; typedef std::uniform_real<double> dist_t; typedef std::variate_generator <eng_t, dist_t > gen_t; eng_t eng; dist_t dist(0.0, 1.0); gen_t gen(eng, dist); std::cout << gen() << std::endl; return 0; }
Indeed, that is what you should use for the TR1 random. Note that we have been trying to also deliver a conforming C++0x (thus, in std::) <random> only lately, in 4.3.x we delivered the TR1 code in the std:: namespace too. Thus, if you want to experiment with the C++0x version, use 4.5.x or mainline.
Reopen...
... to resolve as duplicate. *** This bug has been marked as a duplicate of 40263 ***