91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

C++ Random庫如何實現正態分布

c++
小樊
88
2024-07-21 03:10:58
欄目: 編程語言

C++的標準庫并沒有直接提供生成正態分布隨機數的函數,但可以通過一些數學庫來實現。一種常用的方法是使用Box-Muller算法來生成正態分布的隨機數。

Box-Muller算法的基本思想是利用兩個獨立的均勻分布隨機數來生成正態分布的隨機數。具體步驟如下:

  1. 生成兩個在0到1之間的均勻分布隨機數u和v。
  2. 計算兩個正態分布隨機數x和y:
    x = sqrt(-2 * log(u)) * cos(2 * PI * v)
    y = sqrt(-2 * log(u)) * sin(2 * PI * v)
    
    其中,log表示自然對數,sqrt表示平方根,cos和sin表示余弦和正弦,PI表示圓周率。
  3. x和y即為符合標準正態分布的隨機數,若需要生成具有特定均值和標準差的正態分布隨機數,則可以通過如下公式進行變換:
    z = mean + stddev * x
    
    其中,mean為均值,stddev為標準差。

以下是一個使用Box-Muller算法生成正態分布隨機數的示例代碼:

#include <iostream>
#include <cmath>
#include <cstdlib>

double generate_normal_random(double mean, double stddev) {
    double u = (double)rand() / RAND_MAX;
    double v = (double)rand() / RAND_MAX;
    
    double x = sqrt(-2 * log(u)) * cos(2 * M_PI * v);
    
    return mean + stddev * x;
}

int main() {
    srand(time(NULL));
    
    double mean = 0.0;
    double stddev = 1.0;
    
    for (int i = 0; i < 10; i++) {
        double random = generate_normal_random(mean, stddev);
        std::cout << random << std::endl;
    }
    
    return 0;
}

在上面的代碼中,我們定義了一個函數generate_normal_random來生成正態分布隨機數,然后在main函數中調用該函數來生成10個均值為0,標準差為1的正態分布隨機數。

0
类乌齐县| 龙州县| 黄冈市| 鲁甸县| 五寨县| 横峰县| 巨鹿县| 双鸭山市| 开化县| 抚顺县| 莱芜市| 安达市| 绥芬河市| 温宿县| 班戈县| 洪江市| 漳州市| 东乡| 焦作市| 康保县| 长岛县| 娄烦县| 恩平市| 平塘县| 怀仁县| 舒城县| 仪陇县| 临洮县| 临泽县| 克拉玛依市| 视频| 敖汉旗| 逊克县| 营口市| 绩溪县| 农安县| 云安县| 兴安县| 平定县| 宜良县| 大安市|