1

我一直在研究一个函数来生成 0 到 1 之间的高斯分布随机随机数。这里的这个网站很有帮助,因为我基本上复制了 Polar Form 的算法以了解该过程,但我无法保持介于 0 和 1 之间的值,包括 0 但不包括 1。如果我是正确的,我相信这个的数学符号是 [0, 1)。您可以提供的任何见解都会很棒。在 Unix 上,它编译为;gcc文件名.c -lm

#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

int main()
{
    int i;
    float x, w;
    for (i=0; i<50; i++)
    {
        do {
            x = 2.0 * ( (float)rand() / (float)RAND_MAX ) - 1.0;
            w = x * x;
        }while (w >= 1.0);

        w = (float)sqrt( (-2.0 * log( w )) / w );
        printf("%f\n", x*w);
    }
    return 0;
}
4

1 回答 1

2

我相信提问者要求的是截断高斯分布之类的东西。您可以简单地通过从均值为 0.5 和适当方差的高斯分布生成样本并丢弃任何位于 [0,1] 之外的样本来对此类分布进行采样。

但是,您可能还对以下内容感兴趣:

于 2012-01-19T18:34:11.913 回答