Namespaces
Variants

std:: lgamma, std:: lgammaf, std:: lgammal

From cppreference.net
Common mathematical functions
Nearest integer floating point operations
(C++11)
(C++11)
(C++11) (C++11) (C++11)
Floating point manipulation functions
(C++11) (C++11)
(C++11)
(C++11)
Classification and comparison
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
Types
(C++11)
(C++11)
(C++11)
Macro constants
Definiert in Header <cmath>
(1)
float lgamma ( float num ) ;

double lgamma ( double num ) ;

long double lgamma ( long double num ) ;
(bis C++23)
/*floating-point-type*/
lgamma ( /*floating-point-type*/ num ) ;
(seit C++23)
(constexpr seit C++26)
float lgammaf ( float num ) ;
(2) (seit C++11)
(constexpr seit C++26)
long double lgammal ( long double num ) ;
(3) (seit C++11)
(constexpr seit C++26)
SIMD-Überladung (seit C++26)
Definiert in Header <simd>
template < /*math-floating-point*/ V >

constexpr /*deduced-simd-t*/ < V >

lgamma ( const V & v_num ) ;
(S) (seit C++26)
Definiert in Header <cmath>
template < class Integer >
double lgamma ( Integer num ) ;
(A) (constexpr seit C++26)
1-3) Berechnet den natürlichen Logarithmus des absoluten Wertes der Gammafunktion von num . Die Bibliothek bietet Überladungen von std::lgamma für alle cv-unqualifizierten Gleitkommatypen als Typ des Parameters an. (since C++23)
S) Die SIMD-Überladung führt eine elementweise std::lgamma -Operation auf v_num aus.
(Siehe math-floating-point und deduced-simd-t für deren Definitionen.)
(seit C++26)
A) Zusätzliche Überladungen werden für alle Ganzzahltypen bereitgestellt, die als double behandelt werden.
(since C++11)

Inhaltsverzeichnis

Parameter

num - Gleitkomma- oder Ganzzahlwert

Rückgabewert

Wenn keine Fehler auftreten, wird der Wert des Logarithmus der Gammafunktion von num , also log e |
0
t num-1
e -t d t |
, zurückgegeben.

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

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

Fehlerbehandlung

Fehler werden gemeldet, wie in math_errhandling spezifiziert.

Wenn num null oder eine ganze Zahl kleiner als null ist, kann ein Polfehler auftreten.

Wenn die Implementierung IEEE-Gleitkommaarithmetik (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 wird ausgelöst.
  • Wenn das Argument eine negative Ganzzahl ist, wird +∞ zurückgegeben und FE_DIVBYZERO wird ausgelöst.
  • Wenn das Argument ±∞ ist, wird +∞ zurückgegeben.
  • Wenn das Argument NaN ist, wird NaN zurückgegeben.

Hinweise

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

Die POSIX-Version von lgamma ist nicht threadsicher: Jede Ausführung der Funktion speichert das Vorzeichen der Gammafunktion von num in der statischen externen Variable signgam . Einige Implementierungen bieten lgamma_r an, das einen Zeiger auf benutzerbereitgestellten Speicher für singgam als zweiten Parameter verwendet und threadsicher ist.

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

Die zusätzlichen Überladungen müssen nicht exakt wie (A) bereitgestellt werden. Sie müssen lediglich sicherstellen, dass für ihr Argument num vom Ganzzahltyp, std :: lgamma ( num ) die gleiche Wirkung hat wie std :: lgamma ( static_cast < double > ( num ) ) .

Beispiel

#include <cerrno>
#include <cfenv>
#include <cmath>
#include <cstring>
#include <iostream>
// #pragma STDC FENV_ACCESS ON
const double pi = std::acos(-1); // or std::numbers::pi since C++20
int main()
{
    std::cout << "lgamma(10) = " << std::lgamma(10)
              << ", log(9!) = " << std::log(std::tgamma(10))
              << ", exp(lgamma(10)) = " << std::exp(std::lgamma(10)) << '\n'
              << "lgamma(0.5) = " << std::lgamma(0.5)
              << ", log(sqrt(pi)) = " << std::log(std::sqrt(pi)) << '\n';
    // special values
    std::cout << "lgamma(1) = " << std::lgamma(1) << '\n'
              << "lgamma(+Inf) = " << std::lgamma(INFINITY) << '\n';
    // error handling
    errno = 0;
    std::feclearexcept(FE_ALL_EXCEPT);
    std::cout << "lgamma(0) = " << std::lgamma(0) << '\n';
    if (errno == ERANGE)
        std::cout << "    errno == ERANGE: " << std::strerror(errno) << '\n';
    if (std::fetestexcept(FE_DIVBYZERO))
        std::cout << "    FE_DIVBYZERO raised\n";
}

Ausgabe:

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

Siehe auch

(C++11) (C++11) (C++11)
Gammafunktion
(Funktion)
C-Dokumentation für lgamma

Externe Links

Weisstein, Eric W. "Log Gamma Function." Von MathWorld — Eine Wolfram Web Resource.