Trạng thái của nghệ thuật thực hiện các chức năng đặc biệt chính xác kép là gì? Tôi cần tích phân sau:
https://gist.github.com/3764427
trong đó sử dụng mở rộng chuỗi, tính tổng các số hạng cho đến độ chính xác đã cho và sau đó sử dụng các quan hệ đệ quy để thu được các giá trị cho thấp hơn một cách hiệu quả . Tôi đã kiểm tra nó tốt và tôi nhận được độ chính xác 1e-15 cho tất cả các giá trị của các tham số mà tôi cần, xem các nhận xét của phiên bản Fortran để biết chi tiết.
Có cách nào tốt hơn để thực hiện nó? Đây là một triển khai chức năng gamma trong gfortran:
https://github.com/mirrors/gcc/blob/master/libgfortran/intrinsics/c99_fifts.c#L1781
nó đang sử dụng xấp xỉ hàm hợp lý thay vì tóm tắt một số chuỗi vô hạn mà tôi đang làm. Tôi nghĩ đó là một cách tiếp cận tốt hơn, bởi vì người ta nên có được độ chính xác đồng đều. Có một số cách kinh điển để tiếp cận những điều này, hoặc người ta phải tìm ra một thuật toán đặc biệt cho mỗi chức năng đặc biệt?
Cập nhật 1 :
Dựa trên các ý kiến, đây là việc triển khai bằng SLATEC:
https://gist.github.com/3767621
nó tái tạo các giá trị từ hàm riêng của tôi, đại khái ở mức độ chính xác 1e-15. Tuy nhiên, tôi nhận thấy một vấn đề là với t = 1e-6 và m = 50,
(1e-6)=4.97511945200351715E-003
Cập nhật 2 :
dgamit
F(m, t) = dgamit(m+0.5_dp, t) * gamma(m+0.5_dp) / 2
gamma(m+0.5_dp)