c语言生成正态分布随机数的代码
时间: 2023-07-29 21:12:27 浏览: 274
生成正态分布随机数的常用方法是使用Box-Muller转换方法。以下是使用C语言实现的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
double rand_normal(double mu, double sigma) {
double u1, u2, z;
static double x2 = 0.0;
static int use_last = 0;
if (use_last) {
z = x2;
use_last = 0;
} else {
do {
u1 = rand() * (1.0 / RAND_MAX);
u2 = rand() * (1.0 / RAND_MAX);
} while (u1 <= 1e-7);
z = sqrt(-2.0 * log(u1)) * cos(2.0 * M_PI * u2);
x2 = sqrt(-2.0 * log(u1)) * sin(2.0 * M_PI * u2);
use_last = 1;
}
return mu + z * sigma;
}
int main() {
srand(time(NULL)); // 随机数种子初始化
double mu = 0.0, sigma = 1.0;
for (int i = 0; i < 10; i++) {
double x = rand_normal(mu, sigma);
printf("%f\n", x);
}
return 0;
}
```
其中,`rand_normal`函数的参数`mu`和`sigma`分别表示正态分布的均值和标准差。函数内部使用了静态变量`x2`和`use_last`来保证每次调用函数都会返回不同的随机数。在`main`函数中,我们可以通过循环调用`rand_normal`函数来生成多个正态分布随机数。
阅读全文