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) |
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 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
.
[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.
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.
[editar] 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
.
[editar] 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
[editar] Véase también
(C++11)(C++11)(C++11) |
Función gamma (función) |
Documentación de C para lgamma
|
[editar] Enlaces externos
Weisstein, Eric W. "Log Gamma Function." De MathWorld – Un recurso web de Wolfram.