is_infinite()
Découvrez la fonction is_infinite() en PHP, utilisée pour déterminer si une valeur est infinie selon la norme IEEE 754.
La fonction is_infinite() en PHP vérifie si une valeur en virgule flottante est infinie — c'est-à-dire égale à INF (infini positif) ou -INF (infini négatif). Cette page explique ce qui est considéré comme « infini », comment la fonction se comporte, et les situations pratiques où vous pourriez en avoir besoin.
Syntaxe et valeur de retour
is_infinite(float $num): bool$num— la valeur à tester.- Retourne
truesi$numestINFou-INF, etfalsepour toute autre valeur, y compris les nombres finis normaux etNAN(Not a Number).
is_infinite() n'a de sens que pour les floats. Les entiers ne peuvent jamais être infinis en PHP, donc la fonction retourne toujours false pour eux.
D'où viennent les valeurs infinies ?
En PHP, les nombres en virgule flottante suivent la norme IEEE 754, qui définit des valeurs spéciales pour l'infini. Vous obtenez INF ou -INF dans les cas suivants :
- Vous utilisez directement la constante prédéfinie :
$x = INF; - Un calcul déborde la plage d'un float (environ
±1.8e308) :1.0e308 * 10devientINF. - Une division par zéro en virgule flottante se produit, ou une fonction comme
log(0)retourne l'infini négatif.
Ces valeurs se propagent silencieusement dans les calculs ultérieurs (INF + 1 est toujours INF), c'est pourquoi les vérifier permet de détecter un calcul sorti de sa plage.
Utilisation de base
Ici, nous assignons la constante INF à $number, puis nous appelons is_infinite() pour la tester. La condition est vraie, donc le script affiche The number is infinite.
Ce qui est et n'est pas infini
Le tableau de valeurs ci-dessous montre exactement ce que retourne is_infinite(). Notez qu'un dépassement produit INF, tandis qu'un grand nombre représentable ne le fait pas :
<?php
var_dump(is_infinite(INF)); // bool(true)
var_dump(is_infinite(-INF)); // bool(true)
var_dump(is_infinite(PHP_FLOAT_MAX * 2)); // bool(true) — overflow
var_dump(is_infinite(1 / 0.0001)); // bool(false) — large but finite
var_dump(is_infinite(42)); // bool(false) — an integer
var_dump(is_infinite(NAN)); // bool(false) — NAN is not infinite
?>Le piège principal : NAN (le résultat d'opérations comme sqrt(-1)) n'est pas infini, donc is_infinite(NAN) retourne false. Utilisez is_nan() pour détecter ce cas, et is_finite() pour confirmer qu'une valeur est un nombre ordinaire et utilisable.
Un exemple pratique : se prémunir contre les dépassements
Une utilisation courante consiste à valider le résultat d'un calcul avant de le stocker ou de l'afficher. Si une opération a débordé vers INF, votre code peut réagir plutôt que de propager l'infini :
<?php
function guardedMultiply(float $a, float $b): string
{
$product = $a * $b;
return is_infinite($product)
? "Result overflowed to infinity"
: "Result: $product";
}
echo guardedMultiply(1.0e200, 1.0e200), PHP_EOL; // Result overflowed to infinity
echo guardedMultiply(2, 3), PHP_EOL; // Result: 6
?>La multiplication de 1.0e200 par lui-même dépasse la plage des floats, donc le produit est INF et la garde le détecte. Le second appel retourne une valeur normale.
is_infinite() et les fonctions apparentées
PHP regroupe plusieurs helpers d'inspection de floats. Choisissez celui qui correspond à la question que vous posez :
is_infinite()— la valeur est-elleINFou-INF?is_finite()— la valeur est-elle un nombre normal et fini (niINF, ni-INF, niNAN) ?is_nan()— la valeur est-elleNAN?is_float()— la variable est-elle de type float ?
Pour plus d'helpers numériques, consultez la référence PHP Math.
Conclusion
is_infinite() retourne true uniquement pour INF et -INF, ce qui vous permet de détecter les dépassements en virgule flottante et les autres opérations produisant l'infini. Associez-la à is_finite() et is_nan() pour valider pleinement le résultat de tout calcul sur des floats avant de vous y fier.