以平均值 mean 與標準差 stddev 為參數,機率密度函數為鐘形曲線。廣泛應用於自然現象模擬、金融建模、誤差分析等。
#include <iostream>
#include <vector>
#include <random>
#include <algorithm>
#include <cmath>
using namespace std;
int main() {
std::default_random_engine e;
std::normal_distribution<double> n(4, 1.5); // mean=4, stddev=1.5
std::vector<unsigned> vals(9); // 0..8 桶
for (size_t i = 0; i != 200; ++i) {
unsigned v = std::lround(n(e)); // 四捨五入到整數
if (v < vals.size()) ++vals[v];
}
for (size_t j = 0; j != vals.size(); ++j)
cout << j << " : " << vals[j]
<< string(vals[j], '*') << endl;
int sum = accumulate(vals.begin(), vals.end(), 0);
cout << "sum = " << sum << endl;
return 0;
}
0 : 0
1 : 3 ***
2 : 15 ***************
3 : 40 ****************************************
4 : 64 ************************************************************
5 : 45 *********************************************
6 : 23 ***********************
7 : 9 *********
8 : 1 *
sum = 200
normal_distribution 可能產生負值或超出預期範圍,使用時需邊界檢查。stddev 必須為非負數。std::mt19937_64 搭配 std::random_device 種子。