HOWTO · JavaScript

NEGATIVE_INFINITY en JavaScript

Cet article vous aidera à comprendre la valeur NEGATIVE_INFINITY en JavaScript.

Sur cette page

JavaScript représente l’infini négatif par -Infinity. La constante nommée est Number.NEGATIVE_INFINITY ; l’identifiant NEGATIVE_INFINITY seul n’est pas une variable globale JavaScript. Cette valeur est inférieure à tout nombre fini, mais ce n’est pas le plus petit nombre fini : aucune valeur finie ne se trouve à la limite inférieure de l’intervalle des nombres JavaScript. La valeur finie de plus grande magnitude est Number.MAX_VALUE, et -Number.MAX_VALUE reste fini.

Qu’est-ce que l’infini négatif en JavaScript ?

JavaScript utilise le format numérique IEEE 754 en double précision. Ses valeurs Number comprennent les infinis positif et négatif, ainsi que les valeurs finies et NaN. L’infini négatif est inférieur à tout nombre fini, y compris -Number.MAX_VALUE, et il est égal à lui-même avec l’égalité stricte. Il n’est pas interchangeable avec NaN, qui est différent de toute valeur, y compris de lui-même.

La propriété standard Number.NEGATIVE_INFINITY renvoie la valeur numérique affichée sous la forme -Infinity. La graphie NEGATIVE_INFINITY peut servir dans le texte descriptif, mais le code JavaScript doit la préfixer par Number.. Comme les infinis sont des valeurs numériques et non des exceptions, des calculs peuvent en produire sans déclencher d’erreur.

Comment produire l’infini négatif

La division d’une valeur finie négative par zéro positif produit l’infini négatif. Un dépassement de capacité peut également en produire lorsque le résultat négatif a une magnitude trop grande pour être représenté. Par exemple, multiplier -Number.MAX_VALUE par 2 produit -Infinity par dépassement de capacité. En revanche, -Number.MAX_VALUE reste fini à lui seul.

Exécutez cet exemple :

Le code et les libellés ou sorties affichés dans cette section restent en anglais.

const value = -10 / 0;
console.log(value);
-Infinity

Multiplier la plus grande valeur finie négative par 2 produit également l’infini négatif par dépassement de capacité :

const overflow = -Number.MAX_VALUE * 2;
console.log(overflow);

Le résultat est -Infinity. En revanche, -Number.MAX_VALUE reste fini à lui seul.

Le signe du zéro influe sur le résultat de la division : une valeur finie négative divisée par +0 produit -Infinity, tandis qu’une division par -0 produit Infinity. Vous pouvez aussi utiliser directement la constante nommée lorsqu’un calcul n’exprime pas l’intention aussi clairement :

const lowerBound = Number.NEGATIVE_INFINITY;

Cette déclaration illustre la syntaxe ; elle ne produit aucune sortie. En particulier, Number.NEGATIVE_INFINITY est une propriété de l’objet intégré Number, et non une variable à déclarer.

Comment comparer et détecter l’infini négatif

L’égalité stricte permet de vérifier directement si une valeur est précisément celle-ci. Les comparaisons relationnelles servent à déterminer si une valeur est inférieure ou égale à un seuil. Number.isFinite distingue tous les nombres finis des deux infinis et de NaN.

Le code et les libellés ou sorties affichés dans cette section restent en anglais.

function describeNumber(value) {
  if (value === Number.NEGATIVE_INFINITY) return "negative infinity";
  if (Number.isFinite(value)) return "finite";
  return "another non-finite value";
}

console.log(describeNumber(-Number.MAX_VALUE));
console.log(describeNumber(-10 / 0));
finite
negative infinity

Cette vérification distingue un grand nombre fini négatif de l’infini négatif et regroupe l’infini positif et NaN dans un résultat distinct. Évitez de vérifier uniquement avec value < 0 : cette condition est également vraie pour les nombres négatifs finis ordinaires. Number.isFinite(value) ne suffit pas non plus à identifier la valeur non finie concernée ; comparez avec Number.NEGATIVE_INFINITY lorsque cette distinction est importante.

Comportement arithmétique et cas limites

Multiplier l’infini négatif par un nombre fini positif conserve l’infini négatif comme résultat ; le multiplier par un nombre fini négatif donne l’infini positif. La division par un nombre fini positif conserve le signe, tandis que la division par un nombre fini négatif l’inverse. Ajouter une valeur finie à l’infini négatif laisse l’infini négatif comme résultat, tout comme en soustraire une.

Certaines combinaisons ne produisent pas un infini. L’addition de l’infini positif et de l’infini négatif, la multiplication de l’un ou l’autre des infinis par zéro, ainsi que la division d’un infini par un autre donnent NaN. Lors d’une division par un zéro signé, le signe du résultat dépend des signes des deux opérandes. Ces règles comptent lorsqu’un calcul alimente des comparaisons ultérieures : NaN ne se comporte comme aucun des deux infinis, et toute comparaison ordonnée impliquant NaN est fausse.

Le même comportement des signes s’applique au dépassement de capacité d’un nombre fini : une opération dont le résultat mathématique dépasse la plage représentable peut produire un infini portant le signe du résultat. Il s’agit d’un résultat numérique, et non d’une exception ; le code qui doit rejeter un dépassement doit donc vérifier explicitement le résultat, par exemple avec Number.isFinite.

Usages pratiques et limites

L’infini négatif peut servir de valeur initiale pour rechercher un maximum, puisque chaque candidat fini lui est supérieur. Toutefois, pour une collection vide, le résultat reste -Infinity ; déterminez si cela convient à l’appelant ou si la fonction doit signaler séparément que l’entrée est vide. Voici un petit exemple de recherche du maximum :

Le code et les libellés ou sorties affichés dans cette section restent en anglais.

function maximum(values) {
  let result = Number.NEGATIVE_INFINITY;
  for (const value of values) {
    if (value > result) result = value;
  }
  return result;
}

Ce modèle suppose que les entrées sont des nombres et que conserver -Infinity lorsque l’itérable est vide est acceptable. Si les entrées peuvent contenir NaN, les comparaisons avec cette valeur sont fausses ; validez ou filtrez les valeurs selon la politique de l’application.

N’utilisez pas l’infini négatif comme signal d’erreur général : c’est un résultat numérique légitime, et sans contrat supplémentaire, les appelants risquent de ne pas pouvoir distinguer une erreur du résultat d’un calcul. C’est également une mauvaise valeur de départ pour rechercher un minimum, car aucun candidat fini ne lui est inférieur. Une recherche du minimum commence généralement par Infinity ou par le premier élément valide, avec une politique explicite pour les entrées vides. Cette valeur ne convient pas comme base pour des sommes ou des moyennes : lui ajouter un nombre fini donne toujours -Infinity, ce qui fausse ensuite le résultat.