W3docs

expm1()

Aprende a usar la función expm1() en PHP para calcular el valor exponencial de un número menos 1 con precisión total.

La función PHP expm1() devuelve e elevado a la potencia de un número, menos 1 — es decir, exp(x) - 1. Su valor está en calcular este resultado con precisión para valores pequeños de x, donde la expresión ingenua exp($x) - 1 pierde precisión. Esta página explica qué hace expm1(), su sintaxis, cuándo usarla en lugar de exp() y el problema que existe para resolver.

Sintaxis

expm1(float $num): float
ParámetroDescripción
$numRequerido. El exponente. Cualquier número — positivo, negativo o cero. Los valores no float se convierten a float.

Valor de retorno: e elevado a la potencia de $num, menos 1, como un float. Aquí e es el número de Euler (≈ 2.718281828).

Ejemplo básico

php— editable, runs on the server

Como e^2 ≈ 7.389056, restar 1 da el siguiente resultado:

6.3890560989307

(PHP imprime 14 dígitos significativos por defecto, controlado por el ajuste INI precision.)

¿Por qué no escribir simplemente exp($x) - 1?

Para la mayoría de los valores, expm1($x) y exp($x) - 1 dan el mismo resultado. La diferencia aparece cuando $x está muy cerca de cero.

Cuando $x es muy pequeño, exp($x) es muy cercano a 1, por lo que exp($x) - 1 resta dos números de coma flotante casi iguales. La mayoría de los dígitos significativos se cancelan — un problema conocido como cancelación catastrófica — y el resultado es mucho menos preciso. expm1() está implementado para calcular e^x - 1 directamente, manteniendo la precisión total:

<?php
$x = 1e-15;

echo exp($x) - 1; // imprecise: digits cancel
echo "\n";
echo expm1($x);   // accurate
?>

La sustracción ingenua devuelve aproximadamente 1.1102230246252E-15, mientras que expm1() devuelve 1.0E-15, que es el valor correcto. Siempre que se calculen intereses compuestos, decaimiento o crecimiento en pasos de tiempo muy pequeños, expm1() es la opción segura.

Argumentos negativos y cero

expm1() acepta el rango completo de números reales:

<?php
echo expm1(0);   // e^0 - 1 = 0
echo "\n";
echo expm1(-1);  // 1/e - 1, a negative result
?>

Esto muestra:

0
-0.63212055882856

Nótese que expm1(0) es exactamente 0, y los argumentos negativos producen resultados entre -1 y 0.

Cuándo usar expm1()

  • Matemáticas financieras donde las tasas son pequeñas (p. ej., convertir una tasa anual a una tasa por segundo).
  • Modelos de crecimiento o decaimiento continuo evaluados en intervalos muy pequeños.
  • Cualquier fórmula de la forma e^x - 1 donde x puede aproximarse a cero.

Para la dirección inversa — calcular log(1 + x) con precisión para valores pequeños de x — usa la función complementaria log1p(). Para la exponenciación ordinaria sin el -1, usa exp().

Conclusión

expm1() calcula e^x - 1 con precisión total de coma flotante, incluso cuando x está cerca de cero, donde exp($x) - 1 perdería exactitud. Úsala en cálculos científicos y financieros con exponentes pequeños; para todo lo demás, exp() es suficiente. Consulta también su función inversa, log1p().

Práctica

Práctica
¿Qué es verdadero sobre la función expm1 en PHP?
¿Qué es verdadero sobre la función expm1 en PHP?
Was this page helpful?