W3docs

expm1()

Découvrez la fonction expm1() en PHP, qui calcule e élevé à la puissance d'un nombre moins 1 avec une précision maximale.

La fonction PHP expm1() retourne e élevé à la puissance d'un nombre, moins 1 — c'est-à-dire exp(x) - 1. Sa valeur réside dans le calcul de ce résultat avec précision pour les petites valeurs de x, là où le naïf exp($x) - 1 perd en précision. Cette page explique ce que fait expm1(), sa syntaxe, quand l'utiliser à la place de exp(), et le problème qu'elle existe pour résoudre.

Syntaxe

expm1(float $num): float
ParamètreDescription
$numObligatoire. L'exposant. Tout nombre — positif, négatif ou zéro. Les valeurs non-float sont converties en float.

Valeur de retour : e élevé à la puissance de $num, moins 1, sous forme de float. Ici e est le nombre d'Euler (≈ 2.718281828).

Exemple de base

php— editable, runs on the server

Comme e^2 ≈ 7.389056, soustraire 1 donne la sortie suivante :

6.3890560989307

(PHP affiche 14 chiffres significatifs par défaut, contrôlé par le paramètre INI precision.)

Pourquoi ne pas simplement écrire exp($x) - 1 ?

Pour la plupart des entrées, expm1($x) et exp($x) - 1 donnent le même résultat. La différence apparaît lorsque $x est très proche de zéro.

Lorsque $x est minuscule, exp($x) est très proche de 1, donc exp($x) - 1 soustrait deux nombres à virgule flottante presque égaux. La plupart des chiffres significatifs s'annulent — un problème connu sous le nom d'annulation catastrophique — et le résultat est bien moins précis. expm1() est implémentée pour calculer e^x - 1 directement, en conservant toute la précision :

<?php
$x = 1e-15;

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

La soustraction naïve retourne environ 1.1102230246252E-15, tandis que expm1() retourne 1.0E-15, qui est la valeur correcte. Chaque fois que vous calculez des intérêts composés, une décroissance ou une croissance sur des intervalles de temps très petits, expm1() est le choix sûr.

Arguments négatifs et nuls

expm1() accepte toute la plage des nombres réels :

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

Cela produit :

0
-0.63212055882856

Notez que expm1(0) vaut exactement 0, et les arguments négatifs produisent des résultats compris entre -1 et 0.

Quand utiliser expm1()

  • Les mathématiques financières où les taux sont faibles (par exemple, convertir un taux annuel en taux par seconde).
  • Les modèles de croissance ou de décroissance continue évalués sur de très petits intervalles.
  • Toute formule de la forme e^x - 1x peut s'approcher de zéro.

Pour la direction inverse — calculer log(1 + x) avec précision pour les petits x — utilisez la fonction complémentaire log1p(). Pour l'exponentiation ordinaire sans le -1, utilisez exp().

Conclusion

expm1() calcule e^x - 1 avec toute la précision en virgule flottante, même lorsque x est proche de zéro où exp($x) - 1 perdrait en précision. Utilisez-la dans les calculs scientifiques et financiers impliquant de petits exposants ; pour tout le reste, exp() convient. Voir aussi son inverse, log1p().

Pratique

Pratique
Qu'est-ce qui est vrai à propos de la fonction expm1 en PHP ?
Qu'est-ce qui est vrai à propos de la fonction expm1 en PHP ?
Was this page helpful?