中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

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
宿迁市| 灌南县| 汉川市| 秦安县| 汉阴县| 凤冈县| 红安县| 扬中市| 延川县| 新郑市| 耿马| 光泽县| 牙克石市| 文安县| 南投市| 云梦县| 龙里县| 花莲县| 新昌县| 玛多县| 河东区| 安徽省| 桐城市| 千阳县| 洛隆县| 习水县| 平武县| 许昌市| 罗江县| 岗巴县| 攀枝花市| 陆丰市| 牡丹江市| 嵊泗县| 洛扎县| 沂水县| 南皮县| 普宁市| 广灵县| 汕尾市| 观塘区|