gpt4 book ai didi

c++ - boost C++ : Seeding random numbers in a function

转载 作者:行者123 更新时间:2023-11-30 02:40:27 25 4
gpt4 key购买 nike

我有一个函数,每次调用它时都应该模拟一个新的随机指数变量:

 #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))”可能会修复它,但事实并非如此。我怎样才能做到这一点?

最佳答案

如果您不能更改函数的签名,则可以使用生成器的 static 实例。无需重新播种。

#include <boost/random.hpp>

typedef boost::mt19937 G;
typedef boost::exponential_distribution D;

double generateExponential(double lambda)
{
static G rng(std::time(0)); // initialized and seeded once
boost::variate_generator<G &, D<> > rndm(rng, D<>(lambda));
return rndm();
}

关于c++ - boost C++ : Seeding random numbers in a function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28935749/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com