Namensräume
Varianten
Aktionen

std::tgamma, std::tgammaf, std::tgammal

Von cppreference.com
< cpp‎ | numeric‎ | math
 
 
 
 
Definiert in der Header-Datei <cmath>
(1)
float       tgamma ( float num );

double      tgamma ( double num );

long double tgamma ( long double num );
(bis C++23)
/* Gleitkommazahl-Typ */
            tgamma ( /*Gleitkommazahl-Typ*/ num );
(seit C++23)
(constexpr seit C++26)
float       tgammaf( float num );
(2) (seit C++11)
(constexpr seit C++26)
long double tgammal( long double num );
(3) (seit C++11)
(constexpr seit C++26)
SIMD-Überladung (seit C++26)
Definiert im Header <simd>
template< /*math-floating-point*/ V >

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

            tgamma ( const V& v_num );
(S) (seit C++26)
Definiert in der Header-Datei <cmath>
template< class Integer >
double      tgamma ( Integer num );
(A) (constexpr seit C++26)
1-3) Berechnet die Gammafunktion von num. Die Bibliothek stellt Überladungen von std::tgamma für alle cv-unqualifizierten Gleitkommatypen als Parametertyp bereit.(seit C++23)
S) Die SIMD-Überladung führt eine elementweise std::tgamma auf v_num durch.
(Siehe math-floating-point und deduced-simd-t für ihre Definitionen.)
(seit C++26)
A) Zusätzliche Überladungen werden für alle ganzzahligen Typen bereitgestellt, die als double behandelt werden.
(seit C++11)

Inhalt

[bearbeiten] Parameter

num - Gleitkomma- oder Ganzzahlwert

[bearbeiten] Rückgabewert

Wenn keine Fehler auftreten, wird der Wert der Gammafunktion von num, also
0
tnum-1
e-t dt
, zurückgegeben.

Wenn ein Domänenfehler auftritt, wird ein implementierungsdefinierter Wert (NaN, falls unterstützt) 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.

Wenn ein Bereichsfehler aufgrund von Unterlauf auftritt, wird der korrekte Wert (nach Rundung) zurückgegeben.

[bearbeiten] Fehlerbehandlung

Fehler werden wie in math_errhandling beschrieben gemeldet.

Wenn num Null oder eine ganze Zahl kleiner als Null ist, kann ein Polfehler oder ein Domänenfehler auftreten.

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

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

[bearbeiten] Hinweise

Wenn num eine natürliche Zahl ist, ist std::tgamma(num) die Fakultät von num - 1. Viele Implementierungen berechnen die exakte Fakultät im Ganzzahlbereich, wenn das Argument eine ausreichend kleine ganze Zahl ist.

Für den IEEE-kompatiblen Typ double tritt ein Überlauf auf, wenn 0 < num && num < 1 / DBL_MAX oder wenn num > 171.7.

POSIX verlangt, dass ein Polfehler auftritt, wenn das Argument Null ist, aber ein Domänenfehler, wenn das Argument eine negative ganze Zahl ist. Es wird auch angegeben, dass in Zukunft Domänenfehler für negative ganzzahlige Argumente durch Polfehler ersetzt werden können (in diesem Fall würde sich der Rückgabewert in diesen Fällen von NaN zu ±∞ ändern).

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.

Die zusätzlichen Überladungen müssen nicht exakt als (A) bereitgestellt werden. Sie müssen nur ausreichen, um sicherzustellen, dass für ihr Argument num vom ganzzahligen Typ, std::tgamma(num) die gleiche Wirkung wie std::tgamma(static_cast<double>(num)) hat.

[bearbeiten] Beispiel

#include <cerrno>
#include <cfenv>
#include <cmath>
#include <cstring>
#include <iostream>
// #pragma STDC FENV_ACCESS ON
 
int main()
{
    std::cout << "tgamma(10) = " << std::tgamma(10)
              << ", 9! = " << 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 << '\n'
              << "tgamma(0.5) = " << std::tgamma(0.5)
              << ", sqrt(pi) = " << std::sqrt(std::acos(-1)) << '\n';
 
    // special values
    std::cout << "tgamma(1) = " << std::tgamma(1) << '\n'
              << "tgamma(+Inf) = " << std::tgamma(INFINITY) << '\n';
 
    // error handling
    errno = 0;
    std::feclearexcept(FE_ALL_EXCEPT);
 
    std::cout << "tgamma(-1) = " << std::tgamma(-1) << '\n';
 
    if (errno == EDOM)
        std::cout << "    errno == EDOM: " << std::strerror(errno) << '\n';
    if (std::fetestexcept(FE_INVALID))
        std::cout << "    FE_INVALID raised\n";
}

Mögliche Ausgabe

tgamma(10) = 362880, 9! = 362880
tgamma(0.5) = 1.77245, sqrt(pi) = 1.77245
tgamma(1) = 1
tgamma(+Inf) = inf
tgamma(-1) = nan
    errno == EDOM: Numerical argument out of domain
    FE_INVALID raised

[bearbeiten] Siehe auch

(C++11)(C++11)(C++11)
natürlicher Logarithmus der Gammafunktion
(Funktion) [bearbeiten]
(C++17)(C++17)(C++17)
Betafunktion
(Funktion) [bearbeiten]
C-Dokumentation für tgamma

[bearbeiten] Externe Links

Weisstein, Eric W. "Gamma Function." From MathWorld – A Wolfram Web Resource.