【发布时间】:2015-05-10 05:45:28
【问题描述】:
我有一个函数应该在每次调用时模拟一个新的随机指数变量:
#include <boost/random.hpp>
//Simulates a single exponential random variable
double generateExponential(double lambda) {
boost::mt19937 rng; //Mersenne Twister Generator
rng.seed(time(0));
boost::variate_generator< boost::mt19937&, boost::exponential_distribution<> > rndm(rng, boost::exponenti\
al_distribution<>(lambda));
return rndm();
}
例如,
double newExp = generateExponential(10);
但是,每次我调用该函数时,它都会生成相同的随机数。我希望它在每次调用函数时生成一个不同的随机数。我认为“rng.seed(time(0))”可能会修复它,但它没有。我怎样才能让它做到这一点?
【问题讨论】:
-
每次你调用它时,你都会一直喂它种子。因此,每次调用它时,它都会生成相同的值。 time(0) 在时钟周期之间不会经常变化。
-
请注意,
mt19937已添加到 C++11;如果你有 C++11 可用,那么你可以改进这个功能