W3docs

log1p()

Aprende a usar la función log1p() en PHP para calcular el logaritmo natural de 1 más un número con precisión para valores pequeños.

La función log1p() en PHP calcula el logaritmo natural de 1 + x, expresado como ln(1 + x), de una forma que mantiene la precisión cuando x está muy cerca de cero. Esta página cubre su sintaxis, el problema de precisión que resuelve, los valores que devuelve en los límites de su dominio y cuándo usarla en lugar de log().

Sintaxis

log1p(float $num): float
  • $num — el valor que se suma a 1. Debe ser mayor que -1 para obtener un resultado finito.
  • Valor de retorno — un float igual al logaritmo natural (base e) de 1 + $num.

Qué hace log1p()

Matemáticamente, log1p($num) es idéntico a log(1 + $num). La diferencia está en la precisión numérica. Los números de punto flotante tienen precisión limitada, por lo que al calcular 1 + $num para un $num muy pequeño, la mayoría de los dígitos significativos de $num se pierden en la suma antes de que se aplique el logaritmo. Esto se denomina cancelación catastrófica.

log1p() está implementada para calcular ln(1 + x) directamente, sin formar la suma intermedia, por lo que esos dígitos se preservan. Para entradas pequeñas es la herramienta correcta; para entradas grandes ambas funciones coinciden.

Ejemplo básico

php— editable, runs on the server

Pasamos un valor muy pequeño a log1p() e imprimimos el resultado. La salida es el logaritmo natural de 1.0001, expresado en notación científica (9.9995...E-5 significa 0.000099995...).

Por qué log1p() supera a log(1 + $x) para valores pequeños

Compara los dos enfoques con la misma entrada diminuta:

<?php
$x = 1e-15;

echo log1p($x), "\n";   // 1.0E-15               (accurate)
echo log(1 + $x), "\n"; // 1.1102230246252E-15  (wrong)
?>

La respuesta esperada es aproximadamente 1e-15. log1p() la devuelve casi exactamente, mientras que log(1 + $x) es aproximadamente un 11% mayor porque 1 + 1e-15 ya redondea mal en aritmética de doble precisión. Cuanto menor sea la entrada, mayor es el error relativo en la versión ingenua — que es exactamente el motivo por el que existe log1p().

Dominio y casos límite

El argumento debe ser mayor que -1. Observa cómo se comportan los límites:

<?php
var_dump(log1p(0));      // float(0)     — ln(1) = 0
var_dump(log1p(M_E - 1)); // float(1)    — ln(e) = 1
var_dump(log1p(-1));     // float(-INF)  — ln(0) is negative infinity
var_dump(log1p(-2));     // float(NAN)   — undefined: 1 + (-2) = -1 < 0
?>
  • log1p(0) devuelve 0, ya que ln(1) = 0.
  • En $num = -1 el valor interno es 0, y el logaritmo tiende a menos infinito (-INF).
  • Para $num < -1 el resultado es NAN (no es un número), porque el logaritmo de un valor no positivo no está definido para los números reales.

Valida la entrada antes de llamarla:

<?php
function safeLog1p(float $num): ?float
{
    if ($num <= -1) {
        return null; // outside the valid domain
    }
    return log1p($num);
}

var_dump(safeLog1p(0.5));  // float(0.4054651081081644)
var_dump(safeLog1p(-1.5)); // NULL
?>

Cuándo usarla

log1p() es una optimización de precisión, por lo que resulta ventajosa siempre que trabajes con cantidades próximas a cero:

  • Finanzas — convertir una pequeña tasa de interés o crecimiento r a una tasa de capitalización continua con log1p($r).
  • Estadística y aprendizaje automático — calcular log-probabilidades o log-verosimilitudes donde los valores individuales son minúsculos.
  • Computación científica — cualquier fórmula de la forma ln(1 + x) donde x puede ser pequeño.

Para entradas habituales que no están cerca de cero, log() funciona perfectamente; ambas devuelven prácticamente el mismo valor. La operación inversa — recuperar x a partir de log1p(x) — es expm1(), que calcula e^x - 1 con la misma ventaja de precisión.

Funciones relacionadas

  • log() — logaritmo natural o logaritmo en una base arbitraria.
  • log10() — logaritmo en base 10.
  • exp()e elevado a una potencia (la inversa de log()).
  • expm1() — calcula e^x - 1 con precisión; la inversa de log1p().
  • Funciones matemáticas de PHP — descripción general de la biblioteca matemática de PHP.

Conclusión

log1p() calcula ln(1 + x) preservando la precisión para entradas cercanas a cero, donde el enfoque ingenuo log(1 + $x) pierde exactitud. Recuerda que el argumento debe ser mayor que -1, que -1 produce -INF y que los valores por debajo de -1 generan NAN. Úsala en código financiero, estadístico y científico siempre que haya valores pequeños de por medio.

Práctica

Práctica
¿Qué hace la función log1p() de PHP?
¿Qué hace la función log1p() de PHP?
Was this page helpful?