代码示例
#include<stdio.h>
#include<stdlib.h>
#include <math.h>
#include <time.h>
//第一个参数是平均值,第二个参数是标准差
double generate_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));
for (int i = 0; i < 10; i++)
{
printf("Random number %d: %lf\n", i + 1, generate_normal(5000, 5000));
}
return 0;
}