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) |
Contenido |
[editar] Parámetros
arg | - | Valor de un tipo de punto flotante o un tipo entero. |
[editar] 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).
[editar] 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.
[editar] 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_MAX
oif 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
.
[editar] 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
[editar] 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
|
[editar] Enlaces externos
Weisstein, Eric W. "Gamma Function." De MathWorld – Un recurso web de Wolfram.