2012-01-08 13 views
7

Objective-C'de (Java'da random.nextGaussian ile aynı) rastgele bir Gaussian çift oluşturmaya çalışıyorum. Ancak, rand_gauss() çalışmıyor gibi görünüyor. Bunu gerçekleştirmenin bir yolu bilen var mı?Objective-C/C'de rastgele bir Gaussian çift oluşturma

+0

Yazık, ben baktım ve bir kaç ay önce bir tane yazdım. – Kevin

cevap

9

This link, standart random() işlevini kullanarak nasıl hesaplanacağını gösterir.

Ben büyük olasılıkla [0,1] uzakta olmak [0,MAX_INT] den random() çıktısını dönüştürür ranf() rutin hale gerekecek dikkat etmelidir, ama bu çok zor olmamalı. bağlantılı makale itibaren

:

Box-Muller dönüşümün kutupsal hem daha hızlı ve daha sağlam sayısal olduğunu. Bunun algoritmik açıklaması şöyledir: float x1, x2, w, y1, y2; Ben işteyken sormadınız

 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

'Randf' için' drand48() 'işlevini kullanın. [0, 1] aralığında bir çift döndürür. Bkz. Https://developer.apple.com/library/ios/documentation/System/Conceptual/ManPages_iPhoneOS/man3/drand48.3.html – bcattle

+0

Ayrıca, doğal günlüğü almak için 'log()' işlevini kullanın, bkz. Http: //en.cppreference.com/w/c/numeric/math/log – bcattle