std::lgamma, std::lgammaf, std::lgammal
| Definido en el archivo de encabezado <cmath>
|
||
float lgamma ( float arg ); float lgammaf( float arg ); |
(1) | (desde C++11) |
double lgamma ( double arg ); |
(2) | (desde C++11) |
long double lgamma ( long double arg ); long double lgammal( long double arg ); |
(3) | (desde C++11) |
double lgamma ( 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 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
(C++11)(C++11)(C++11) |
Función gamma (función) |
Documentación de C para lgamma
| |
Enlaces externos
Weisstein, Eric W. "Log Gamma Function." De MathWorld – Un recurso web de Wolfram.