我需要生成X
隨機雙數均勻分佈在兩個區間[a,b]之間,其中a
和b
也是雙數。隨機數生成兩個區間之間的雙打[a,b]
那些X
數字需要在類函數內部產生,比如myclass::doSomething(a,b)
。問題在於,每當doSomething(a,b)
函數被另一個類函數調用時,傳遞給doSomething(a,b)
函數的時間間隔[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);
...
}
您的解決方案是否正常工作?如果是這樣,你需要解決什麼問題?換句話說,SO讀者有什麼問題? – 2012-04-06 13:45:38
@OliCharlesworth,我的解決方案並不完全工作。我更新了我原來的帖子。首先,「引擎」不是全球性的,其次,生成的數字似乎不是均勻分佈的。 – Tin 2012-04-06 13:49:57
您使用什麼測試來確定分佈的均勻性,以及您的樣本量是多少?順便說一句,應該指出的是,兩個數字之間的差異是**不是均勻分佈的。 – MSalters 2012-04-06 14:04:22