2016-11-15 16 views
2

私はC++で任意の精度の算術ライブラリを実装していますが、ガンマ関数を実装するときはかなり詰まっています。等価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

ランチョス近似はあまりにも悪くはないようです。あなたは何を正確に疑いますか? pC(チェビシェフ多項式)を計算し、例えば、あなたがp(i-1)及びチェビシェフ係数からp(i)を計算することができ、それらの行列を維持、一度計算され、そのよう(a + 1/2)!がステートフルオブジェクトとして実装することができるコードの

部品。

1

Spouge's approximationはLanczosの近似と似ていますが、希望の誤差を設定することができるため、任意の精度で使用する方が簡単でしょう。

関連する問題