2012-01-08 10 views
7

में एक यादृच्छिक Gaussian डबल उत्पन्न करना मैं उद्देश्य-सी में एक यादृच्छिक Gaussian डबल उत्पन्न करने की कोशिश कर रहा हूं (जावा में random.nextGaussian के समान)। हालांकि rand_gauss() काम नहीं कर रहा है। किसी को भी इसे प्राप्त करने का एक तरीका पता है?उद्देश्य-सी/सी

+0

दया जब मैं काम पर था आप से पूछना नहीं था, मैं इसे ऊपर देखा और एक जोड़ी महीने पहले एक ने लिखा है। – Kevin

उत्तर

9

This link दिखाता है कि मानक random() फ़ंक्शन का उपयोग करके इसकी गणना कैसे करें।

मैं नोट करना चाहिए आप की संभावना ranf() दिनचर्या कि [0,MAX_INT] से random() के उत्पादन में धर्मान्तरित [0,1] से होने का बनाने के लिए करना होगा कि है, लेकिन यह भी मुश्किल नहीं होना चाहिए।

जुड़ा हुआ लेख से

:

बॉक्स मुलर परिवर्तन के ध्रुवीय प्रपत्र दोनों तेजी से और अधिक मजबूत संख्यानुसार है। इसका एल्गोरिदमिक वर्णन है: फ्लोट 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

'randf' के लिए 'drand48()' फ़ंक्शन का उपयोग करें। यह अंतराल [0, 1) में एक डबल देता है। Https://developer.apple.com/library/ios/documentation/System/Conceptual/ManPages_iPhoneOS/man3/drand48.3.html – bcattle

+0

प्राकृतिक लॉग लेने के लिए 'लॉग()' फ़ंक्शन का भी उपयोग करें, http देखें: //en.cppreference.com/w/c/numeric/math/log – bcattle