C语言生成1000个正态随机数
时间: 2023-08-26 13:07:11 浏览: 109
C语言产生随机数
以下是使用C语言生成1000个正态随机数的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#define N 1000
double generate_normal_random_number()
{
double u1, u2, w, mult;
static double x1, x2;
static int call = 0;
if (call == 1) {
call = !call;
return x2 * mult;
}
do {
u1 = -1 + ((double) rand() / RAND_MAX) * 2;
u2 = -1 + ((double) rand() / RAND_MAX) * 2;
w = pow(u1, 2) + pow(u2, 2);
} while (w >= 1 || w == 0);
mult = sqrt((-2 * log(w)) / w);
x1 = u1 * mult;
x2 = u2 * mult;
call = !call;
return x1 * mult;
}
int main()
{
int i;
double data[N];
srand((unsigned int) time(NULL));
for (i = 0; i < N; i++) {
data[i] = generate_normal_random_number();
}
for (i = 0; i < N; i++) {
printf("%f\n", data[i]);
}
return 0;
}
```
该代码使用了Box-Muller算法生成正态分布的随机数。具体来说,该算法首先生成两个在区间[-1, 1]内均匀分布的随机数u1和u2,然后通过一系列的计算,得到两个正态分布的随机数x1和x2。最终,x1被作为输出,并且x2被存储在静态变量中以备下次调用。这样做的好处是,每次调用该函数只需要计算一次,可以大大提高效率。
阅读全文