std::lgamma, std::lgammaf, std::lgammal - cppreference.com
De cppreference.com
| Definido en el archivo de encabezado |
||
|
|
(1) | (desde C++11) |
|
|
(2) | (desde C++11) |
|
|
(3) | (desde C++11) |
|
|
(4) | (desde C++11) |
1-3) Calcula el logaritmo natural del valor absoluto de la función gamma de arg.
4) Un conjunto de sobrecargas o una plantilla de función que acepta un argumento de cualquier tipo entero. Equivalente a (2) (el argumento se convierte a 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 del logaritmo de la función gamma of arg, es decir, log
e|∫∞
0targ-1
e-t dt|.
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.
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.
Si la implementación admite la aritmética de punto flotante IEEE (IEC 60559):
- Si el argumento es 1, se devuelve +0.
- Si el argumento es 2, se devuelve +0.
- 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 +∞ y se genera FE_DIVBYZERO.
- Si el argumento es +∞, se devuelve +∞.
- Si el argumento es -∞, se devuelve -∞.
- Si el argumento es NaN, se devuelve NaN.
Notas
Si arg es un número natural, std::lgamma(arg) es el logaritmo del factorial de arg-1.
La versión POSIX de lgamma no es segura para hilos: cada ejecución de la función almacena el signo de la función gamma de arg en la variable externa estática signgam. Algunas implementaciones proporcionan lgamma_r, que toma un puntero al almacenamiento proporcionado por el usuario para singgam como segundo parámetro y es segura para hilos.
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 const double pi = std::acos(-1); //ostd::numbers::pi since C++20 int main() { std::cout << "lgamma(10) = " << std::lgamma(10) << ", log(9!) = " << std::log(2*3*4*5*6*7*8*9) << '\n' << "lgamma(0.5) = " << std::lgamma(0.5) << " , log(sqrt(pi)) = " << std::log(std::sqrt(pi)) << '\n'; // valores especiales std::cout << "lgamma(1) = " << std::lgamma(1) << '\n' << "lgamma(+Inf) = " << std::lgamma(INFINITY) << '\n'; // manejo de errores errno = 0; std::feclearexcept(FE_ALL_EXCEPT); std::cout << "lgamma(0) = " << std::lgamma(0) << '\n'; if (errno == ERANGE) std::cout << " errno == ERANGE: " << std::strerror(errno) << '\n'; if (std::fetestexcept(FE_DIVBYZERO)) std::cout << " Se generó FE_DIVBYZERO\n"; }
Salida:
lgamma(10) = 12.8018, log(9!) = 12.8018
lgamma(0.5) = 0.572365 , log(sqrt(pi)) = 0.572365
lgamma(1) = 0
lgamma(+Inf) = inf
lgamma(0) = inf
errno == ERANGE: Resultado numérico fuera de rango
Se generó FE_DIVBYZERO
Véase también
Enlaces externos
Weisstein, Eric W. "Log Gamma Function." De MathWorld – Un recurso web de Wolfram.