Espacios de nombres
Variantes
Acciones

std::lgamma, std::lgammaf, std::lgammal

De cppreference.com
< cpp‎ | numeric‎ | math
 
 
 
Funciones matemáticas comunes
Funciones
Operaciones básicas
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)(C++11)(C++11)
Funciones exponenciales
(C++11)
(C++11)
(C++11)
(C++11)
Funciones de potencias
(C++11)
(C++11)
Funciones trigonométricas e hiperbólicas
(C++11)
(C++11)
(C++11)
Funciones de error y gamma
(C++11)
(C++11)
lgamma
(C++11)
(C++11)
Operaciones de punto flotante del entero más cercano
(C++11)(C++11)(C++11)
(C++11)
(C++11)
(C++11)(C++11)(C++11)
Funciones de manipulación de punto flotante
(C++11)(C++11)
(C++11)
(C++11)
(C++11)(C++11)
(C++11)
Clasificación/comparación
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
Constantes de macro
(C++11)(C++11)(C++11)(C++11)(C++11)
 
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)
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).

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
|
0
targ-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) [editar]

[editar] Enlaces externos

Weisstein, Eric W. "Log Gamma Function." De MathWorld – Un recurso web de Wolfram.