Espacios de nombres
Variantes
Acciones

std::log1p, std::log1pf, std::log1pl

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)
log1p
(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)
(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       log1p ( float arg );
float       log1pf( float arg );
(1) (desde C++11)
double      log1p ( double arg );
(2) (desde C++11)
long double log1p ( long double arg );
long double log1pl( long double arg );
(3) (desde C++11)
double      log1p ( TipoEntero arg );
(4) (desde C++11)
1-3) Calcula el logaritmo natural (base e) de 1+arg. Esta función es más precisa que la expresión std::log(1+arg) si arg está cerca de cero.
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

ln(1+arg) si no se producen errores.

Si se produce un error de dominio, se devuelve un valor definido por la implementación (NaN donde se dé apoyo).

Si se produce un error de polo, se devuelve -HUGE_VAL, -HUGE_VALF, o -HUGE_VALL.

Si se produce un error debido a subdesbordamiento, se devuelve el resultado correcto (después del redondeo).

[editar] Manejo de errores

Los errores se informan como se especifica en math_errhandling.

Se produce un error de dominio si arg es menor que -1.

Se puede producir un error de polo si arg es -1.

Si la implementación admite la aritmética de punto flotante IEEE (IEC 60559):

  • Si el argumento es +0, se devuelve +0.
  • Si el argumento es -0, se devuelve -0.
  • Si el argumento es -1, se devuelve -∞ y se genera FE_DIVBYZERO.
  • Si el argumento es menor que -1, se devuelve NaN y se genera FE_INVALID.
  • Si el argumento es +∞, se devuelve +∞.
  • Si el argumento es NaN, se devuelve NaN.

[editar] Notas

Las funciones std::expm1 y std::log1p son útiles para cálculos financieros, por ejemplo, al calcular pequeñas tasas de interés diarias: (1+x)n
-1
se puede expresar como std::expm1(n * std::log1p(x)). Estas funciones también simplifican la escritura de funciones hiperbólicas inversas precisas.

[editar] Ejemplo

#include <iostream>
#include <cfenv>
#include <cmath>
#include <cerrno>
#include <cstring>
// #pragma STDC FENV_ACCESS ON
int main()
{
    std::cout << "log1p(0) = " << log1p(0) << '\n'
              << "Interés devengado en 2 días sobre $100, compuesto diariamente al 1%\n"
              << " en un calendario 30/360 = "
              << 100*expm1(2*log1p(0.01/360)) << '\n'
              << "log(1+1e-16) = " << std::log(1+1e-16)
              << " log1p(1e-16) = " << std::log1p(1e-16) << '\n';
    // valores especiales
    std::cout << "log1p(-0) = " << std::log1p(-0.0) << '\n'
              << "log1p(+Inf) = " << std::log1p(INFINITY) << '\n';
    // manejo de errores
    errno = 0;
    std::feclearexcept(FE_ALL_EXCEPT);
    std::cout << "log1p(-1) = " << std::log1p(-1) << '\n';
    if (errno == ERANGE)
        std::cout << "    errno == ERANGE: " << std::strerror(errno) << '\n';
    if (std::fetestexcept(FE_DIVBYZERO))
        std::cout << "    Se generó FE_DIVBYZERO\n";
}

Posible salida:

log1p(0) = 0
Interés devengado en 2 días sobre $100, compuesto diariamente al 1%
 en un calendario 30/360 = 0.00555563
log(1+1e-16) = 0 log1p(1e-16) = 1e-16
log1p(-0) = -0
log1p(+Inf) = inf
log1p(-1) = -inf
    errno == ERANGE: Resultado demasiado grande
    Se generó FE_DIVBYZERO


[editar] Véase también

(C++11)(C++11)
Calcula el logaritmo natural (base e) (ln(x))
(función) [editar]
(C++11)(C++11)
Calcula el logaritmo común (base 10) (log10(x))
(función) [editar]
(C++11)(C++11)(C++11)
Logaritmo de base 2 del número dado (log2(x))
(función) [editar]
(C++11)(C++11)(C++11)
Devuelve e elevada a la potencia dada, menos uno (ex-1)
(función) [editar]