【发布时间】:2015-10-03 18:13:09
【问题描述】:
我正在尝试使用 boost 在 C++-11 中生成随机数。我看过一些关于这个的好帖子,我能够生成随机数,将我的所有代码放在主函数中,就像这个网页(http://www.sitmo.com/article/generating-random-numbers-in-c-with-boost/)中建议的那样。
但是,我无法封装可由不同函数调用的随机数生成器 (RNG)。我希望这个封装的 RNG 接收数字范围和随机种子作为参数。我尝试按照这篇文章 (Boost random number generator) 的建议来做。
我实现了下面的代码。但它在两个方面都失败了:随机种子的变化和值范围的定义。
#include <boost/random/variate_generator.hpp>
#include <boost/generator_iterator.hpp>
#include <boost/random/mersenne_twister.hpp>
#include <boost/random/normal_distribution.hpp>
typedef boost::mt19937 ENG; // Mersenne Twister
typedef boost::normal_distribution<double> DIST; // Normal Distribution
typedef boost::variate_generator<ENG,DIST> GEN; // Variate generator
class RNG {
private:
ENG eng;
DIST dist;
public:
GEN gen;
RNG(double min,double max,int seed)
: dist(min,max), gen(eng,dist)
{eng.seed(seed); }
};
这是我的主要功能。
int main(int argc, char **argv){
if(argc == 2){
int myseed = atoi(argv[1]);
double minimum = 1.;
double maximum = 10.;
int N = 20;
RNG myrn(minimum,maximum,myseed);
for (int i = 0; i < N; i++){
std::cout << myrn.gen() << std::endl;
}
return 0;
}
exit(1);
}
此实现独立于我使用的种子生成相同的随机数序列。此外,随机数不在最小值和最大值之间的范围内。有谁知道如何解决这两个问题?
【问题讨论】: