दोहरी परिशुद्धता विशेष कार्यों को लागू करने की कला की स्थिति क्या है? मुझे निम्नलिखित इंटीग्रल चाहिए: लिए और , जो निचले अधूरे गामा फ़ंक्शन के संदर्भ में लिखा जा सकता है। यहाँ मेरा फोरट्रान और सी कार्यान्वयन है: मीटर=0,1,2,। । । t>0
https://gist.github.com/3764427
जो श्रृंखला विस्तार का उपयोग करता है, दिए गए सटीकता तक की शर्तों को बताता है, और फिर कम लिए मूल्यों को कुशलता से प्राप्त करने के लिए पुनरावर्तन संबंधों का उपयोग करता है । मैंने इसे अच्छी तरह से परखा है और मुझे उन सभी मापदंडों के लिए 1e-15 सटीकता प्राप्त है जिनकी मुझे आवश्यकता है, विवरण के लिए फोरट्रान संस्करण की टिप्पणियाँ देखें।
क्या इसे लागू करने का एक बेहतर तरीका है? यहाँ गफ़रन में एक गामा समारोह कार्यान्वयन है:
https://github.com/mirrors/gcc/blob/master/libgfortran/intrinsics/c99_functions.c#L1781
यह कुछ अनंत श्रृंखला को समेटने के बजाय तर्कसंगत फ़ंक्शन सन्निकटन का उपयोग कर रहा है जो मैं कर रहा हूं। मुझे लगता है कि यह एक बेहतर दृष्टिकोण है, क्योंकि एक समान सटीकता प्राप्त करनी चाहिए। क्या इन चीजों को प्राप्त करने के लिए कुछ विहित तरीका है, या प्रत्येक विशेष फ़ंक्शन के लिए एक विशेष एल्गोरिथ्म का पता लगाना है?
अपडेट 1 :
टिप्पणियों के आधार पर, यहाँ SLATEC का उपयोग करके कार्यान्वयन है:
https://gist.github.com/3767621
यह 1e-15 सटीकता के स्तर पर मोटे तौर पर मेरे स्वयं के फ़ंक्शन से मानों को पुन: पेश करता है। हालाँकि, मैंने एक समस्या देखी कि t = 1e-6 और m = 50 के लिए, शब्द 1e-303 के बराबर हो जाता है और उच्च "m" के लिए यह बस गलत उत्तर देना शुरू कर देता है। मेरे फ़ंक्शन में यह समस्या नहीं है, क्योंकि मैं लिए सीधे श्रृंखला विस्तार / पुनरावृत्ति संबंधों का उपयोग करता । यहाँ एक सही मूल्य का एक उदाहरण दिया गया है: एफएम
(1e-6)=4.97511945200351715E-003
,
लेकिन मैं SLATEC का उपयोग करके इसे प्राप्त नहीं कर सकता क्योंकि भाजक ऊपर उड़ता है। जैसा कि आप देख सकते हैं, का वास्तविक मूल्य अच्छा और छोटा है।
अपडेट 2 :
उपरोक्त समस्या से बचने के लिए, कोई फ़ंक्शन dgamit
(Tricomi का अधूरा गामा फ़ंक्शन) का उपयोग कर सकता है , फिर F(m, t) = dgamit(m+0.5_dp, t) * gamma(m+0.5_dp) / 2
, इसलिए साथ कोई समस्या नहीं है, लेकिन दुर्भाग्य से लिए चल रहा है । हालांकि यह मेरे उद्देश्यों के लिए पर्याप्त उच्च हो सकता है।मीटर ≈ 172 मीटरgamma(m+0.5_dp)