1

私はゼロと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 に答える