std::tgamma, std::tgammaf, std::tgammal
| Definido en el archivo de encabezado <cmath>
|
||
float tgamma ( float arg ); float tgammaf( float arg ); |
(1) | (desde C++11) |
double tgamma ( double arg ); |
(2) | (desde C++11) |
long double tgamma ( long double arg ); long double tgammal( long double arg ); |
(3) | (desde C++11) |
double tgamma ( TipoEntero arg ); |
(4) | (desde C++11) |
double).Parámetros
| arg | - | Valor de un tipo de punto flotante o un tipo entero. |
Valor de retorno
Si no se producen errores, se devuelve el valor de la función gamma de arg, es decir ∫∞
0targ-1
e-t dt.
Si se produce un error de dominio, se devuelve un valor definido por la implementación (NaN donde se dé apoyo).
Si se produce un error de polo, se devuelve HUGE_VAL, ±HUGE_VALF, o ±HUGE_VALL.
Si se produce un error de rango debido a desbordamiento, se devuelve HUGE_VAL, ±HUGE_VALF, o ±HUGE_VALL.
Si se produce un error de rango debido a subdesbordamiento, se devuelve el valor correcto (después del redondeo).
Manejo de errores
Los errores se informan como se especifica en math_errhandling.
Si arg es cero o es un entero menor que cero, se puede producir un error de polo o un error de dominio.
Si la implementación admite la aritmética de punto flotante IEEE (IEC 60559):
- Si el argumento es +0, se devuelve +∞ y se genera FE_DIVBYZERO.
- Si el argumento es -0, se devuelve -∞ y se genera FE_DIVBYZERO.
- Si el argumento es un entero negativo, se devuelve NaN y se genera FE_INVALID.
- Si el argumento es -∞, se devuelve NaN y se genera FE_INVALID.
- Si el argumento es +∞, se devuelve +∞.
- Si el argumento es NaN, se devuelve NaN.
Notas
Si arg es es un número natural, std::tgamma(arg) es el factorial de arg-1. Muchas implementaciones calculan el factorial exacto de dominio de enteros si el argumento es un entero suficientemente pequeño.
Para el tipo double compatible con IEEE, ocurre desbordamiento si 0 < x < 1/DBL_MAXoif x > 171.7.
POSIX requiere que se produzca un error de polo si el argumento es cero, pero que se produzca un error de dominio cuando el argumento sea 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 devuelto en esos casos cambiaría de NaN a ±∞).
Hay una función no estándar llamada gamma en varias implementaciones, pero su definición es inconsistente. Por ejemplo, la versión glibc y 4.2BSD de gamma ejecuta lgamma, pero la versión 4.4BSD de gamma ejecuta tgamma.
Ejemplo
#include <iostream>
#include <cmath>
#include <cerrno>
#include <cstring>
#include <cfenv>
#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';
// valores especiales
std::cout << "tgamma(1) = " << std::tgamma(1) << '\n'
<< "tgamma(+Inf) = " << std::tgamma(INFINITY) << '\n';
// manejo de errores
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 << " Se generó FE_INVALID\n";
}
Posible salida:
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: Argumento numérico fuera de dominio
Se generó FE_INVALID
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 de C para tgamma
| |
Enlaces externos
Weisstein, Eric W. "Gamma Function." De MathWorld – Un recurso web de Wolfram.