2016-11-15 2 views
2

Ich bin eine beliebige arithmetische Bibliothek mit beliebiger Genauigkeit in C++ implementieren und ich bin ziemlich stecken bei der Implementierung der Gamma-Funktion.Arbitrary Gamma-Funktion

Durch die Äquivalenzen mit gamma(n) = gamma(n - 1) * n und gamma(n) = gamma(n + 1)/n bzw. kann ich eine rationale Zahl r im Bereich (1; 2] für alle reellen Werte x erhalten.

Allerdings kann ich gamma(r) nicht bewerten. Für die Lanczos-Approximation (https://en.wikipedia.org/wiki/Lanczos_approximation) benötige ich vorberechnete Werte p, die zufällig eine Fakultät eines nicht ganzzahligen Wertes (?!) Berechnen und nicht dynamisch mit meinem derzeitigen Wissen berechnet werden können ... Vorberechnung von Werten für p würde nicht Sinnvoll bei der Implementierung einer beliebigen Präzisionsbibliothek.

Gibt es Algorithmen, die gamma(r) in einer angemessenen Zeit mit beliebiger Genauigkeit berechnen? Danke für Ihre Hilfe.

+0

Ich nehme an, Sie haben http://functions.wolfram.com/GammaBetaErf/Gamma/introductions/Gamma/05/ studiert und nicht gefunden, was Sie brauchen. –

+0

Sieht so aus, als ob es mehr mit Mathe als mit Programmierung zu tun hat ... Vielleicht ist es besser, dort eine Frage zu stellen. –

+0

Ich würde auch in die Quelle von MPFR schauen, um zu sehen, was sie verwenden. –

Antwort

0

Lanczos Näherung scheint nicht so schlecht. Was genau verdächtigen Sie?

Teile des Codes, die p, C (Chebyshev-Polynome) berechnen und (a + 1/2)! kann als zustandsbehaftete Objekte implementiert werden, so dass zum Beispiel Sie p(i) aus p(i-1) und Chebyshev-Koeffizienten berechnen und einmal berechnet werden, deren Matrix beibehalten wird.

1

Spouge's approximation ist ähnlich wie Lanczos Annäherung, aber wahrscheinlich einfacher für beliebige Genauigkeit zu verwenden, wie Sie den gewünschten Fehler einstellen können.

Verwandte Themen