I'm trying to generate a random Gaussian double in Objective-C (the same as random.nextGaussian
in Java). However rand_gauss()
doesn't seem to work. Anyone know a way of achieving this?
This link shows how to calculate it using the standard random()
function.
I should note that you'll likely have to make the ranf()
routine that converts the output of random()
from [0,MAX_INT]
to be from [0,1]
, but that shouldn't be too difficult.
From the linked article:
The polar form of the Box-Muller transformation is both faster and more robust numerically. The algorithmic description of it is: 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;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With