J'essaie de générer un double gaussien aléatoire en Objective-C (de la même manière que random.nextGaussian
en Java). Toutefois, rand_gauss()
ne semble pas fonctionner. Quelqu'un connaît-il un moyen d'y parvenir ?
Réponse
Trop de publicités?Ce lien montre comment le calculer en utilisant la norme random()
fonction.
Je dois noter que vous aurez probablement à faire la ranf()
qui convertit la sortie de random()
de [0,MAX_INT]
pour être de [0,1]
mais cela ne devrait pas être trop difficile.
Extrait de l'article en question :
La forme polaire de la transformation de Box-Muller est à la fois plus rapide et plus robuste numériquement. Sa description algorithmique est la suivante float x1, x2, w, y1, y2 ;
do {
x1 = 2.0 * ranf() - 1.0;
x2 = 2.0 * ranf() - 1.0;
w = x1 * x1 + x2 * x2;
} while ( w >= 1.0 );
w = sqrt( (-2.0 * ln( w ) ) / w );
y1 = x1 * w;
y2 = x2 * w;