std:: lgamma, std:: lgammaf, std:: lgammal
|
Definiert in Header
<cmath>
|
||
| (1) | ||
|
float
lgamma
(
float
num
)
;
double
lgamma
(
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
>
|
(S) | (seit C++26) |
|
Zusätzliche Überladungen
(seit C++11)
|
||
|
Definiert in Header
<cmath>
|
||
|
template
<
class
Integer
>
double lgamma ( Integer num ) ; |
(A) | (constexpr seit C++26) |
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.
|
(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. |