में एक यादृच्छिक Gaussian डबल उत्पन्न करना मैं उद्देश्य-सी में एक यादृच्छिक Gaussian डबल उत्पन्न करने की कोशिश कर रहा हूं (जावा में random.nextGaussian
के समान)। हालांकि rand_gauss()
काम नहीं कर रहा है। किसी को भी इसे प्राप्त करने का एक तरीका पता है?उद्देश्य-सी/सी
उत्तर
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;
'randf' के लिए 'drand48()' फ़ंक्शन का उपयोग करें। यह अंतराल [0, 1) में एक डबल देता है। Https://developer.apple.com/library/ios/documentation/System/Conceptual/ManPages_iPhoneOS/man3/drand48.3.html – bcattle
प्राकृतिक लॉग लेने के लिए 'लॉग()' फ़ंक्शन का भी उपयोग करें, http देखें: //en.cppreference.com/w/c/numeric/math/log – bcattle
दया जब मैं काम पर था आप से पूछना नहीं था, मैं इसे ऊपर देखा और एक जोड़ी महीने पहले एक ने लिखा है। – Kevin