Генерация гауссовских распределенных случайных чисел в C - как сохранить значения от 0 до 1 - PullRequest
1 голос
/ 19 января 2012

Я работал над функцией генерации гауссовских распределенных случайных случайных значений от нуля до 1. Этот сайт очень помог, поскольку я в основном скопировал алгоритм для полярной формы, чтобы понятьпроцедура, но у меня возникают проблемы с сохранением значения от 0 до 1, включая 0, но исключая 1. Я считаю, что математическая запись для этого [0, 1), если я прав.Любое понимание, которое вы могли бы предоставить, было бы здорово.В Unix это компилируется с;gcc fileName .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;
}

1 Ответ

2 голосов
/ 19 января 2012

Я полагаю, что спрашивающий спрашивает что-то вроде усеченного гауссовского распределения . Вы можете произвести выборку такого распределения, просто сгенерировав выборки из гауссовского распределения со средним 0,5 и подходящей дисперсией, и отбросив любые выборки, которые находятся за пределами [0,1].

Однако вас также может заинтересовать:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...