我需要生成X
均匀分布在两个区间 [a,b] 之间的随机双数,其中a
和b
也是双数。
这些X
数字需要在类函数内部生成,比如myclass::doSomething(a,b)
. 问题是,每次函数被另一个类函数调用时,[a,b]
传递给函数的间隔都会发生变化,比如.doSomething(a,b)
doSomething(a,b)
doThat()
我想要一个允许我的解决方案:
1. 拥有engine
一个更大范围的,理想情况下,每次应用程序运行时它应该只播种一次。
2.X
每次调用doSomething()
函数内部产生的随机双数,应该是均匀分布的。
我下面的解决方案不允许更高的范围,engine
并且似乎生成的数字不一定是均匀分布的。
//file: utilities.h
template <typename Generator>
double randomDoubleEngine(Generator& engine, double low_bound, double high_bound )
{
if (low_bound > high_bound){
std::swap(low_bound, high_bound);
}
return std::uniform_real_distribution<>( low_bound, high_bound )( engine );
}
//file: myclass.h
void myclass::doThat(param1, param2){
for(int i=0; i < myclass.iter; i++){
...
...
doSomething(a,b);
...
}
}
void myclass::doSomething(double a, double b)
{
std::random_device rd;
static std::mt19937 engine(rd());
.....
double curThreshold = randomDoubleEngine(engine, a, b);
...
}