の2つの区間[a、b]の間に均等に分布する乱数を生成する必要があります。a
とb
も二重数です。2つの区間[a、b]の間に乱数を生成する
これらのX
の数値は、クラス関数の内部で生成する必要があります(例:myclass::doSomething(a,b)
)。事は、doSomething(a,b)
関数が別のクラス関数、たとえばdoThat()
によって呼び出されるたびに、doSomething(a,b)
関数に渡された間隔[a,b]
が変化することです。
私は私を可能にするソリューションたいと思います:高い範囲でengine
をお持ちの
1.を、理想的には、それは一度だけアプリケーションの実行ごとに播種する必要があります。
2. doSomething()
関数を呼び出すたびに生成されたX
のランダムな倍数は、一様に分配する必要があります。
私の解決策では、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);
...
}
解決策はありますか?もしそうなら、あなたは解決する必要がある問題は何ですか?言い換えれば、SOの視聴者のための質問は何ですか? –
@OliCharlesworth、私の解決策は完全には機能しません。元の投稿を更新しました。第1に、「エンジン」はグローバルではなく、第2に、生成された数は一様に分布していないように見える。 – Tin
分布の均一性を決定するためにどのようなテストを行いましたか、サンプルサイズはどのくらいでしたか? BTWでは、2つの数字が異なる場合、生成された2つの数字の差異は**一様ではないことに注意してください。 – MSalters