Çift hassasiyetli özel fonksiyonların uygulanmasında son teknoloji nedir? Aşağıdaki integrale ihtiyacım var: içinm=0,1,2,. . . vedaha düşük eksik gama fonksiyonu açısından yazılabilent>0. İşte benim Fortran ve C uygulamam:
https://gist.github.com/3764427
seri genişletmeyi kullanan, belirtilen doğruluk derecesine kadar terimleri toplar ve daha sonra düşük için değerleri etkin bir şekilde elde etmek için özyineleme ilişkilerini kullanır . İyi test ettim ve ihtiyacım olan tüm parametre değerleri için 1e-15 doğruluğu elde ediyorum, ayrıntılar için Fortran sürümünün yorumlarına bakın.
Uygulamanın daha iyi bir yolu var mı? İşte gfortran'da bir gama fonksiyonu uygulaması:
https://github.com/mirrors/gcc/blob/master/libgfortran/intrinsics/c99_functions.c#L1781
yaptığım sonsuz dizileri toplamak yerine rasyonel fonksiyon yaklaşımı kullanıyor. Bence bu daha iyi bir yaklaşım, çünkü tek biçimli doğruluk elde edilmelidir. Bunlara yaklaşmanın kanonik bir yolu var mı, yoksa her özel fonksiyon için özel bir algoritma mı bulmak gerekiyor?
Güncelleme 1 :
Yorumlara dayanarak, SLATEC kullanan uygulama:
https://gist.github.com/3767621
kabaca 1e-15 doğruluk seviyesinde kendi fonksiyonumdan değerler üretir. Ancak, t = 1e-6 ve m = 50, t m + 1 için bir sorun fark ettim.
(1e-6)=4.97511945200351715E-003
Güncelleme 2 :
dgamit
F(m, t) = dgamit(m+0.5_dp, t) * gamma(m+0.5_dp) / 2
gamma(m+0.5_dp)