2012-01-08 15 views
7

Sto provando a generare un doppio Gaussian casuale in Objective-C (lo stesso di random.nextGaussian in Java). Tuttavia, rand_gauss() non sembra funzionare. Qualcuno sa come raggiungerlo?Generazione di un doppio Gaussiano casuale in Objective-C/C

+0

Peccato non ha chiesto, mentre ero al lavoro, ho guardato su e ha scritto un un paio di mesi fa. – Kevin

risposta

9

This link mostra come calcolarlo utilizzando la funzione standard random().

Vorrei sottolineare che è probabile che sia per fare il ranf() routine che converte l'uscita di random() da [0,MAX_INT] di essere da [0,1], ma che non dovrebbe essere troppo difficile.

Dalla articolo collegato:

La forma polare della trasformazione di Box-Muller è sia più veloce e numericamente più robusto. La descrizione algoritmica di esso è: 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

Per 'randf' usa la funzione' drand48() '. Restituisce un doppio nell'intervallo [0, 1). Vedi https://developer.apple.com/library/ios/documentation/System/Conceptual/ManPages_iPhoneOS/man3/drand48.3.html – bcattle

+0

Usa anche la funzione 'log()' per prendere il registro naturale, vedi http: //en.cppreference.com/w/c/numeric/math/log – bcattle

Problemi correlati