写一个c语言 符合高斯分布的随机数生成
时间: 2023-09-10 22:14:20 浏览: 222
C语言产生瑞利分布,高斯分布
5星 · 资源好评率100%
可以使用Box-Muller转换法来生成符合高斯分布的随机数。具体实现如下:
```
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#define PI 3.14159265358979323846
double rand_normal(double mean, double stddev);
int main(void)
{
int i;
double mean = 0.0, stddev = 1.0;
srand((unsigned int)time(NULL)); // 设置随机数种子为当前时间
for (i = 0; i < 10; i++) {
printf("%f\n", rand_normal(mean, stddev));
}
return 0;
}
// 生成符合高斯分布的随机数
double rand_normal(double mean, double stddev)
{
static double n2 = 0.0;
static int n2_cached = 0;
if (!n2_cached) {
double x, y, r;
do {
x = 2.0 * rand() / RAND_MAX - 1; // 生成[-1, 1)之间的随机数
y = 2.0 * rand() / RAND_MAX - 1; // 生成[-1, 1)之间的随机数
r = x * x + y * y;
} while (r >= 1.0 || r == 0.0);
double d = sqrt(-2.0 * log(r) / r);
double n1 = x * d;
n2 = y * d;
double result = n1 * stddev + mean;
n2_cached = 1;
return result;
} else {
n2_cached = 0;
return n2 * stddev + mean;
}
}
```
该程序使用了Box-Muller转换法,通过生成两个符合均匀分布的随机数,然后应用一些数学公式,得到符合高斯分布的随机数。其中,mean和stddev分别为高斯分布的均值和标准差,可以根据具体情况进行调整。在上述程序中,我们生成了10个符合高斯分布的随机数,并将它们输出到控制台上。
阅读全文