X
2 つの区間 [a,b] の間に均一に分布するランダムな倍精度数を生成する必要があります。ここでa
、 とb
も倍精度数です。
これらX
の数値は、クラス関数内で生成する必要がありますmyclass::doSomething(a,b)
。[a,b]
問題は、関数に渡される間隔が、関数が別のクラス関数によって呼び出されるdoSomething(a,b)
たびに変化することです。doSomething(a,b)
doThat()
次のことを可能にするソリューションが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);
...
}