c语言怎么生成正态分布的随机数
时间: 2023-11-12 08:06:51 浏览: 179
MATLAB用随机数rand生成正态分布并进行误差分析(内含下载链接).zip
5星 · 资源好评率100%
在C语言中,可以使用Box-Muller算法来生成正态分布的随机数。这种方法需要生成两个独立的、均匀分布的随机数,然后通过一些数学公式将它们转换成正态分布的随机数。
下面是一个使用Box-Muller算法生成正态分布的随机数的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
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;
y = 2.0*rand()/RAND_MAX - 1;
r = x*x + y*y;
}
while (r == 0.0 || r > 1.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;
}
}
int main()
{
srand(time(NULL));
int i;
for (i = 0; i < 10; i++)
{
printf("%f\n", rand_normal(0.0, 1.0));
}
return 0;
}
```
在这个示例代码中,rand_normal()函数接受两个参数:期望值mean和标准差stddev。它使用rand()函数生成两个均匀分布的随机数x和y,然后将它们转换成正态分布的随机数n1和n2。最后,它返回一个以mean为期望值、stddev为标准差的正态分布的随机数。
在主函数中,我们可以调用rand_normal()函数来生成一组正态分布的随机数。我们使用srand()函数来设置随机数生成器的种子,以保证每次运行程序时生成的随机数序列不同。
阅读全文