2016-11-15 128 views
2

我在C++中實現了一個任意的精度算術庫,並且在實現gamma函數時我幾乎陷入了困境。任意精度gamma函數

通過使用等價gamma(n) = gamma(n - 1) * ngamma(n) = gamma(n + 1)/n,分別,我可以在對所有實數值x範圍(1; 2]獲得的有理數r。我不知道如何評估gamma(r)。對於Lanczos近似(https://en.wikipedia.org/wiki/Lanczos_approximation),我需要預先計算的值p,它恰巧計算出非整數值(?!)的階乘,並且不能用我當前的知識動態計算...預計算p的值不會在實現任意精度庫時非常有意義。

是否有算法在合理的時間內以任意精度計算gamma(r)?謝謝你的幫助。

+0

我認爲你已經學習http://functions.wolfram.com/GammaBetaErf/Gamma/introductions/Gamma/05/,但未能找到你需要的東西。 –

+0

看起來它更像是數學而不是編程...也許,最好在那裏發表問題。 –

+0

我也想看看MPFR的來源,看看他們使用什麼。 –

回答

0

Lanczos逼近似乎不太糟糕。你懷疑什麼?的代碼

部件,其計算pC(切比雪夫多項式)和(a + 1/2)!可被實現爲有狀態的對象,使得,例如,可以從p(i-1)和切比雪夫係數計算p(i)和被計算一次,保持它們的基質中。

1

Spouge's approximation與Lanczos的逼近類似,但可能更容易使用任意精度,因爲您可以設置所需的錯誤。