Namensräume
Varianten
Aktionen

lgamma, lgammaf, lgammal

Von cppreference.com
< c‎ | numerik‎ | math
 
 
 
Allgemeine mathematische Funktionen
Funktionen
Grundlegende Operationen
(C99)
(C99)
(C99)
(C99)(C99)(C99)(C23)
Maximum/Minimum-Operationen
(C99)
(C99)
Exponentialfunktionen
(C23)
(C99)
(C99)
(C23)
(C23)

(C99)
(C99)(C23)
(C23)
(C23)
Potenzfunktionen
(C99)
(C23)
(C23)

(C99)
(C23)
(C23)
Trigonometrische und hyperbolische Funktionen
(C23)
(C23)
(C23)
(C23)
(C99)
(C99)
(C99)
Nächste ganze Gleitkommazahlen
(C99)(C99)(C99)
(C99)

(C99)(C99)(C99)
(C23)(C23)(C23)(C23)
Gleitkomma-Manipulation
(C99)(C99)
(C99)(C23)
(C99)
Verengende Operationen
(C23)
(C23)
(C23)
(C23)
(C23)
(C23)
Quanten- und Quantenexponent-Funktionen
Dezimal-Neu-Kodierungsfunktionen
Gesamtordnung und Payload-Funktionen
Klassifizierung
(C99)
(C99)
(C99)
(C23)
Fehler- und Gammafunktionen
(C99)
(C99)
lgamma
(C99)
(C99)
Typen
Makrokonstanten
Spezielle Gleitkommawerte
(C99)(C23)
Argumente und Rückgabewerte
Fehlerbehandlung
Schnelle Operationsanzeigen
 
Definiert in Header <math.h>
float       lgammaf( float arg );
(1) (seit C99)
double      lgamma( double arg );
(2) (seit C99)
long double lgammal( long double arg );
(3) (seit C99)
Definiert in Header <tgmath.h>
#define lgamma( arg )
(4) (seit C99)
1-3) Berechnet den natürlichen Logarithmus des Absolutbetrags der Gammafunktion von arg.
4) Typ-generische Makrofunktion: Wenn arg den Typ long double hat, wird lgammal aufgerufen. Andernfalls, wenn arg einen ganzzahligen Typ oder den Typ double hat, wird lgamma aufgerufen. Andernfalls wird lgammaf aufgerufen.

Inhalt

[bearbeiten] Parameter

arg - Gleitkommawert

[bearbeiten] Rückgabewert

Wenn keine Fehler auftreten, wird der Wert des Logarithmus der Gammafunktion von arg, d. h. loge|
0
targ-1
e-t dt|
, zurückgegeben.

Wenn ein Polfehler auftritt, wird +HUGE_VAL, +HUGE_VALF oder +HUGE_VALL zurückgegeben.

Wenn ein Bereichsfehler aufgrund von Überlauf auftritt, wird ±HUGE_VAL, ±HUGE_VALF oder ±HUGE_VALL zurückgegeben.

[bearbeiten] Fehlerbehandlung

Fehler werden wie in math_errhandling angegeben gemeldet.

Wenn arg Null ist oder eine ganze Zahl kleiner als Null ist, kann ein Polfehler auftreten.

Wenn die Implementierung IEEE-Gleitkomma-Arithmetik (IEC 60559) unterstützt,

  • Wenn das Argument 1 ist, wird +0 zurückgegeben.
  • Wenn das Argument 2 ist, wird +0 zurückgegeben.
  • Wenn das Argument ±0 ist, wird +∞ zurückgegeben und FE_DIVBYZERO ausgelöst.
  • Wenn das Argument eine negative ganze Zahl ist, wird +∞ zurückgegeben und FE_DIVBYZERO ausgelöst.
  • Wenn das Argument ±∞ ist, wird +∞ zurückgegeben.
  • Wenn das Argument NaN ist, wird NaN zurückgegeben.

[bearbeiten] Hinweise

Wenn arg eine natürliche Zahl ist, ist lgamma(arg) der Logarithmus der Fakultät von arg - 1.

Die POSIX-Version von lgamma ist nicht Thread-sicher: Jede Ausführung der Funktion speichert das Vorzeichen der Gammafunktion von arg in der statischen externen Variablen signgam. Einige Implementierungen bieten lgamma_r, die einen Zeiger auf einen vom Benutzer bereitgestellten Speicher für singgam als zweites Parameterargument nimmt und Thread-sicher ist.

Es gibt eine nicht standardmäßige Funktion namens gamma in verschiedenen Implementierungen, aber ihre Definition ist inkonsistent. Zum Beispiel führen die glibc und die 4.2BSD-Version von gamma lgamma aus, aber die 4.4BSD-Version von gamma führt tgamma aus.

[bearbeiten] Beispiel

#include <errno.h>
#include <fenv.h>
#include <float.h>
#include <math.h>
#include <stdio.h>
// #pragma STDC FENV_ACCESS ON
 
int main(void)
{
    printf("lgamma(10) = %f, log(9!) = %f\n", lgamma(10),
                                              log(2 * 3 * 4 * 5 * 6 * 7 * 8 * 9));
    const double pi = acos(-1);
    printf("lgamma(0.5) = %f, log(sqrt(pi)) = %f\n", log(sqrt(pi)), lgamma(0.5));
    // special values
    printf("lgamma(1) = %f\n", lgamma(1));
    printf("lgamma(+Inf) = %f\n", lgamma(INFINITY));
 
    // error handling
    errno = 0; feclearexcept(FE_ALL_EXCEPT);
    printf("lgamma(0) = %f\n", lgamma(0));
    if (errno == ERANGE)
        perror("    errno == ERANGE");
    if (fetestexcept(FE_DIVBYZERO))
        puts("    FE_DIVBYZERO raised");
}

Mögliche Ausgabe

lgamma(10) = 12.801827, log(9!) = 12.801827
lgamma(0.5) = 0.572365, log(sqrt(pi)) = 0.572365
lgamma(1) = 0.000000
lgamma(+Inf) = inf
lgamma(0) = inf
    errno == ERANGE: Numerical result out of range
    FE_DIVBYZERO raised

[bearbeiten] Referenzen

  • C23-Standard (ISO/IEC 9899:2024)
  • 7.12.8.3 The lgamma functions (S. TBD)
  • 7.25 Typ-generische Mathematik <tgmath.h> (S. TBD)
  • F.10.5.3 The lgamma functions (S. TBD)
  • C17-Standard (ISO/IEC 9899:2018)
  • 7.12.8.3 The lgamma functions (S. 182)
  • 7.25 Typ-generische Mathematik <tgmath.h> (S. 272-273)
  • F.10.5.3 The lgamma functions (S. 383)
  • C11-Standard (ISO/IEC 9899:2011)
  • 7.12.8.3 The lgamma functions (S. 250)
  • 7.25 Typ-generische Mathematik <tgmath.h> (S. 373-375)
  • F.10.5.3 The lgamma functions (S. 525)
  • C99-Standard (ISO/IEC 9899:1999)
  • 7.12.8.3 The lgamma functions (S. 231)
  • 7.22 Typ-generische Mathematik <tgmath.h> (S. 335-337)
  • F.9.5.3 The lgamma functions (S. 462)

[bearbeiten] Siehe auch

(C99)(C99)(C99)
berechnet die Gammafunktion
(Funktion) [bearbeiten]
C++ Dokumentation für lgamma

[bearbeiten] Externe Links

Weisstein, Eric W. "Log Gamma Function." Aus MathWorld – Eine Wolfram-Webressource.