代码示例

#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;
}
最后修改:2023 年 08 月 04 日
如果觉得我的文章对你有用,请随意赞赏