C++的標準庫并沒有直接提供生成正態分布隨機數的函數,但可以通過一些數學庫來實現。一種常用的方法是使用Box-Muller算法來生成正態分布的隨機數。
Box-Muller算法的基本思想是利用兩個獨立的均勻分布隨機數來生成正態分布的隨機數。具體步驟如下:
x = sqrt(-2 * log(u)) * cos(2 * PI * v)
y = sqrt(-2 * log(u)) * sin(2 * PI * v)
其中,log表示自然對數,sqrt表示平方根,cos和sin表示余弦和正弦,PI表示圓周率。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的正態分布隨機數。