std:: tgamma, std:: tgammaf, std:: tgammal
|
Definido en el encabezado
<cmath>
|
||
| (1) | ||
|
float
tgamma
(
float
num
)
;
double
tgamma
(
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
>
|
(S) | (desde C++26) |
|
Sobrecargas adicionales
(desde C++11)
|
||
|
Definido en el encabezado
<cmath>
|
||
|
template
<
class
Integer
>
double tgamma ( Integer num ) ; |
(A) | (constexpr desde C++26) |
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
.
|
(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. |