2012-01-08 12 views
7

Estoy intentando generar un doble gaussiano aleatorio en Objective-C (lo mismo que random.nextGaussian en Java). Sin embargo, rand_gauss() parece no funcionar. Alguien sabe una manera de lograr esto?Generando un doble gaussiano aleatorio en Objective-C/C

+0

lástima que no pidió mientras yo estaba en el trabajo, lo busqué y escribió uno hace un par de meses. – Kevin

Respuesta

9

This link muestra cómo calcularlo utilizando la función estándar random().

deben tener en cuenta que es probable que tenga que hacer la rutina ranf() que convierte la salida de random() de [0,MAX_INT] ser de [0,1], pero eso no debería ser demasiado difícil.

Desde el artículo enlazado:

La forma polar de la transformación de Box-Muller es a la vez más rápido y numéricamente más robusto. La descripción algorítmica de este es: 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; 
+1

Para 'randf' use la función' drand48() '. Devuelve un doble en el intervalo [0, 1). Consulte https://developer.apple.com/library/ios/documentation/System/Conceptual/ManPages_iPhoneOS/man3/drand48.3.html – bcattle

+0

También use la función 'log()' para tomar el registro natural, vea http: //en.cppreference.com/w/c/numeric/math/log – bcattle

Cuestiones relacionadas