std:: lgamma, std:: lgammaf, std:: lgammal
|
Definido en el encabezado
<cmath>
|
||
| (1) | ||
|
float
lgamma
(
float
num
)
;
double
lgamma
(
double
num
)
;
|
(hasta C++23) | |
|
/*floating-point-type*/
lgamma ( /*floating-point-type*/ num ) ; |
(desde C++23)
(constexpr desde C++26) |
|
|
float
lgammaf
(
float
num
)
;
|
(2) |
(desde C++11)
(constexpr desde C++26) |
|
long
double
lgammal
(
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 lgamma ( Integer num ) ; |
(A) | (constexpr desde C++26) |
std::lgamma
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::lgamma
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 del logaritmo de la función gamma de
num
, es decir
log
e
|
∫
∞
0
t
num-1
e
-t
d
t
|
.
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.
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.
Si la implementación soporta 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 FE_DIVBYZERO se activa.
- Si el argumento es un entero negativo, se devuelve +∞ y FE_DIVBYZERO se activa.
- Si el argumento es ±∞, se devuelve +∞.
- Si el argumento es NaN, se devuelve NaN.
Notas
Si num es un número natural, std :: lgamma ( num ) es el logaritmo del factorial de num - 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
num
en la variable externa estática
signgam
. Algunas implementaciones proporcionan
lgamma_r
, que toma un puntero a almacenamiento proporcionado por el usuario para
singgam
como segundo parámetro, y es segura para hilos.
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 requieren ser proporcionadas exactamente como (A) . Solo necesitan ser suficientes para garantizar que para su argumento num de tipo entero, std :: lgamma ( num ) tenga el mismo efecto que std :: lgamma ( static_cast < double > ( num ) ) .
Ejemplo
#include <cerrno> #include <cfenv> #include <cmath> #include <cstring> #include <iostream> // #pragma STDC FENV_ACCESS ON const double pi = std::acos(-1); // or std::numbers::pi since C++20 int main() { std::cout << "lgamma(10) = " << std::lgamma(10) << ", log(9!) = " << std::log(std::tgamma(10)) << ", exp(lgamma(10)) = " << std::exp(std::lgamma(10)) << '\n' << "lgamma(0.5) = " << std::lgamma(0.5) << ", log(sqrt(pi)) = " << std::log(std::sqrt(pi)) << '\n'; // special values std::cout << "lgamma(1) = " << std::lgamma(1) << '\n' << "lgamma(+Inf) = " << std::lgamma(INFINITY) << '\n'; // error handling 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 << " FE_DIVBYZERO raised\n"; }
Salida:
lgamma(10) = 12.8018, log(9!) = 12.8018, exp(lgamma(10)) = 362880
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
FE_DIVBYZERO raised
Véase también
|
(C++11)
(C++11)
(C++11)
|
función gamma
(función) |
|
Documentación C
para
lgamma
|
|
Enlaces externos
| Weisstein, Eric W. "Función Log Gamma." De MathWorld — Un recurso web de Wolfram. |