C++的標(biāo)準(zhǔn)庫(kù)并沒(méi)有直接提供生成正態(tài)分布隨機(jī)數(shù)的函數(shù),但可以通過(guò)一些數(shù)學(xué)庫(kù)來(lái)實(shí)現(xiàn)。一種常用的方法是使用Box-Muller算法來(lái)生成正態(tài)分布的隨機(jī)數(shù)。
Box-Muller算法的基本思想是利用兩個(gè)獨(dú)立的均勻分布隨機(jī)數(shù)來(lái)生成正態(tài)分布的隨機(jī)數(shù)。具體步驟如下:
x = sqrt(-2 * log(u)) * cos(2 * PI * v)
y = sqrt(-2 * log(u)) * sin(2 * PI * v)
其中,log表示自然對(duì)數(shù),sqrt表示平方根,cos和sin表示余弦和正弦,PI表示圓周率。z = mean + stddev * x
其中,mean為均值,stddev為標(biāo)準(zhǔn)差。以下是一個(gè)使用Box-Muller算法生成正態(tài)分布隨機(jī)數(shù)的示例代碼:
#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;
}
在上面的代碼中,我們定義了一個(gè)函數(shù)generate_normal_random
來(lái)生成正態(tài)分布隨機(jī)數(shù),然后在main
函數(shù)中調(diào)用該函數(shù)來(lái)生成10個(gè)均值為0,標(biāo)準(zhǔn)差為1的正態(tài)分布隨機(jī)數(shù)。