Namespaces
Variants

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

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
Definido en el encabezado <cmath>
(1)
float tgamma ( float num ) ;

double tgamma ( double num ) ;

long double tgamma ( long double num ) ;
(hasta C++23)
/*floating-point-type*/
tgamma ( /*floating-point-type*/ num ) ;
(desde C++23)
(constexpr desde C++26)
float tgammaf ( float num ) ;
(2) (desde C++11)
(constexpr desde C++26)
long double tgammal ( long double num ) ;
(3) (desde C++11)
(constexpr desde C++26)
Sobrecarga SIMD (desde C++26)
Definido en el encabezado <simd>
template < /*math-floating-point*/ V >

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

tgamma ( const V & v_num ) ;
(S) (desde C++26)
Definido en el encabezado <cmath>
template < class Integer >
double tgamma ( Integer num ) ;
(A) (constexpr desde C++26)
1-3) Calcula la función gamma de num . La biblioteca proporciona sobrecargas de std::tgamma para todos los tipos de punto flotante sin calificación cv como tipo del parámetro. (desde C++23)
S) La sobrecarga SIMD realiza un std::tgamma elemento por elemento en v_num .
(Consulte math-floating-point y deduced-simd-t para sus definiciones.)
(desde C++26)
A) Se proporcionan sobrecargas adicionales para todos los tipos enteros, los cuales son tratados como double .
(since C++11)

Contenidos

Parámetros

num - valor de punto flotante o entero

Valor de retorno

Si no ocurren errores, se devuelve el valor de la función gamma de num , es decir
0
t num-1
e -t d t
.

Si ocurre un error de dominio, se devuelve un valor definido por la implementación (NaN donde esté soportado).

Si ocurre un error de polo, ±HUGE_VAL , ±HUGE_VALF , o ±HUGE_VALL es devuelto.

Si ocurre un error de rango debido a desbordamiento, ±HUGE_VAL , ±HUGE_VALF , o ±HUGE_VALL es devuelto.

Si ocurre un error de rango debido a desbordamiento inferior, se devuelve el valor correcto (después del redondeo).

Manejo de errores

Los errores se reportan como se especifica en math_errhandling .

Si num es cero o es un entero menor que cero, puede ocurrir un error de polo o un error de dominio.

Si la implementación soporta aritmética de punto flotante IEEE (IEC 60559),

  • Si el argumento es ±0, se retorna ±∞ y FE_DIVBYZERO es activado.
  • Si el argumento es un entero negativo, se retorna NaN y FE_INVALID es activado.
  • Si el argumento es -∞, se retorna NaN y FE_INVALID es activado.
  • Si el argumento es +∞, se retorna +∞.
  • Si el argumento es NaN, se retorna NaN.

Notas

Si num es un número natural, std :: tgamma ( num ) es el factorial de num - 1 . Muchas implementaciones calculan el factorial exacto en el dominio de los enteros si el argumento es un entero suficientemente pequeño.

Para el tipo compatible con IEEE double , el desbordamiento ocurre si 0 < num && num < 1 / DBL_MAX o si num > 171.7 .

POSIX requiere que ocurra un error de polo si el argumento es cero, pero un error de dominio ocurre cuando el argumento es un entero negativo. También especifica que en el futuro, los errores de dominio pueden ser reemplazados por errores de polo para argumentos enteros negativos (en cuyo caso el valor de retorno en esos casos cambiaría de NaN a ±∞).

Existe una función no estándar llamada gamma en varias implementaciones, pero su definición es inconsistente. Por ejemplo, la versión de glibc y 4.2BSD de gamma ejecuta lgamma , pero la versión de 4.4BSD de gamma ejecuta tgamma .

Las sobrecargas adicionales no están obligadas a proporcionarse exactamente como (A) . Solo necesitan ser suficientes para garantizar que para su argumento num de tipo entero, std :: tgamma ( num ) tenga el mismo efecto que std :: tgamma ( static_cast < double > ( num ) ) .

Ejemplo

#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";
}

Salida posible:

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

Véase también

(C++11) (C++11) (C++11)
logaritmo natural de la función gamma
(función)
(C++17) (C++17) (C++17)
función beta
(función)
Documentación C para tgamma

Enlaces externos

Weisstein, Eric W. "Función Gamma." De MathWorld — Un recurso web de Wolfram.