[英]c++ Function to create gaussian random numbers
我正在使用以下函數來生成高斯隨機數:
double r_norm(double mean, double sigma){
random_device rd;
mt19937 gen(rd());
normal_distribution<double> d(mean, sigma);
return d(gen);
}
但是,當我使用cout在main()中調用此函數時:
for (int k = 0; k < 10; k++){
cout << r_norm(2,0.5) <<endl;
}
它輸出相同的數字10次。 理想情況下,我需要能夠在任何地方調用此函數,以便每次都接收一個新生成的數字。
更新:我設法通過將范圍之外的隨機設備和mersenne Twister聲明為全局變量來解決此問題,但是有一種更整潔的方法嗎?
問題是您需要回收random_device
。
如果您確實想保留完全相同的函數簽名,則最簡單的方法是使用全局變量:
random_device rd;
mt19937 gen(rd());
double r_norm(double mean, double sigma){
normal_distribution<double> d(mean, sigma);
return d(gen);
}
話雖這么說:stl隨機分布是有狀態的,所以如果您想要一個實際的有效分布,則還需要回收d
。
此時,維護您的接口將需要static std::map<pair<double, double>, normal_distribution>
以便您也正確地回收它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.