簡體   English   中英

C ++函數創建高斯隨機數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM