W3docs

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 true si $num est INF ou -INF, et false pour toute autre valeur, y compris les nombres finis normaux et NAN (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 * 10 devient INF.
  • 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

php— editable, runs on the server

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-elle INF ou -INF ?
  • is_finite() — la valeur est-elle un nombre normal et fini (ni INF, ni -INF, ni NAN) ?
  • is_nan() — la valeur est-elle NAN ?
  • 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.

Pratique

Pratique
Quel est le rôle de la fonction 'is_infinite()' en PHP ?
Quel est le rôle de la fonction 'is_infinite()' en PHP ?
Was this page helpful?