c语言怎么生成正态分布的随机数
时间: 2023-11-12 17:06:54 浏览: 72
生成正态分布的随机数可以使用 Box-Muller算法,该算法利用两个均匀分布的随机数生成一个正态分布的随机数。具体实现如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
double box_muller(double mu, double sigma) {
double u1 = rand() / (RAND_MAX + 1.0);
double u2 = rand() / (RAND_MAX + 1.0);
double z1 = sqrt(-2.0 * log(u1)) * cos(2 * M_PI * u2);
return mu + sigma * z1;
}
int main() {
srand(time(NULL)); // 初始化随机数种子
double mu = 0.0; // 均值
double sigma = 1.0; // 标准差
int n = 10; // 生成随机数的个数
for (int i = 0; i < n; i++) {
double x = box_muller(mu, sigma);
printf("%f ", x);
}
printf("\n");
return 0;
}
```
在 Box-Muller 算法中,我们需要使用两个均匀分布的随机数,这里使用 `rand()` 函数生成。`log()` 函数是自然对数函数,`cos()` 函数是余弦函数,它们都需要包含 math.h 头文件。函数 `box_muller()` 中的参数 `mu` 和 `sigma` 分别表示正态分布的均值和标准差。在主函数中,我们可以根据需要设置这两个参数,并使用 `box_muller()` 函数生成指定个数的随机数。
阅读全文