WITHOUT USING C++ 11 RANDOM
Looking for a boost random expert... I need to generate random numbers in between many, many different ranges. I've written the below functions:
#include <iostream> #include <boost/random.hpp> #include <boost/generator_iterator.hpp> boost::mt19937 g_oRng; int generateIntVariate(int p_iMin, int p_iMax){ boost::uniform_int<> min_to_max(p_iMin, p_iMax); boost::variate_generator< boost::mt19937, boost::uniform_int<> > oGen(g_oRng, min_to_max); return oGen(); } float generateFloatVariate(int p_fMin, p_fMax){ boost::uniform_real<> min_to_max(p_fMin, p_fMax); boost::variate_generator< boost::mt19937, boost::uniform_real<> > oGen(m_oRng, min_to_max); return oGen(); } int main(){ struct timeval tp; gettimeofday(&tp, NULL); g_oRng = boost::mt19937((int)tp.tv_sec); for(int i = 0 ; i < 10 ; ++i){ std::cout << generateIntVariate(0, 10) << ", " << generateFloatVariate(0.0f, 10.0f) << std::endl; } } The problem is that both functions return the same exact number for a given range, every time it's executed.
(gdb) p generateIntVariate(0, 10) $40 = 8 (gdb) p generateIntVariate(0, 10) $41 = 8 (gdb) p generateIntVariate(0, 10) $42 = 8 (gdb) p generateIntVariate(0, 10) $43 = 8 The same thing as above happens with the float function. Is there any way I can accomplish what I'm trying to do using the boost random distros?
:inboost:mt19937. Why are you doing this?