HOWTO · JavaScript

NEGATIVE_INFINITY in JavaScript

Dieser Artikel hilft Ihnen beim Verständnis des NEGATIVE_INFINITY-Werts in JavaScript.

Auf dieser Seite

JavaScript stellt negative Unendlichkeit als -Infinity dar. Die benannte Konstante heißt Number.NEGATIVE_INFINITY; der Bezeichner NEGATIVE_INFINITY allein ist keine globale JavaScript-Variable. Dieser Wert ist kleiner als jede endliche Zahl, aber nicht die kleinste endliche Zahl: Am unteren Ende des JavaScript-Zahlenbereichs gibt es keinen endlichen Wert. Der betragsmäßig größte endliche Wert ist Number.MAX_VALUE, und -Number.MAX_VALUE ist weiterhin endlich.

Was ist negative Unendlichkeit in JavaScript?

JavaScript verwendet das IEEE-754-Zahlenformat mit doppelter Genauigkeit. Zu den Number-Werten gehören positive und negative Unendlichkeit, endliche Werte und NaN. Negative Unendlichkeit ist kleiner als jede endliche Zahl, einschließlich -Number.MAX_VALUE, und bei strikter Gleichheit gleich sich selbst. Sie ist nicht mit NaN austauschbar, denn NaN ist mit keinem Wert gleich, auch nicht mit sich selbst.

Die Standardeigenschaft Number.NEGATIVE_INFINITY ergibt den numerischen Wert, der als -Infinity dargestellt wird. Die Schreibweise NEGATIVE_INFINITY eignet sich als beschreibender Text, muss im JavaScript-Code aber mit Number. qualifiziert werden. Da Unendlichkeiten numerische Werte und keine Ausnahmen sind, können Berechnungen sie ergeben, ohne einen Fehler auszulösen.

So erzeugen Sie negative Unendlichkeit

Die Division eines negativen endlichen Werts durch positive Null ergibt negative Unendlichkeit. Auch ein Überlauf kann sie erzeugen, wenn ein negatives endliches Ergebnis betragsmäßig zu groß für die Darstellung ist. Beispielsweise führt die Multiplikation von -Number.MAX_VALUE mit 2 durch einen Überlauf zu -Infinity. Dagegen ist -Number.MAX_VALUE allein weiterhin endlich.

Führen Sie dieses Beispiel aus:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

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

Auch die Multiplikation des betragsmäßig größten endlichen negativen Werts mit 2 führt durch einen Überlauf zu negativer Unendlichkeit:

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

Das Ergebnis ist -Infinity. Im Gegensatz dazu ist -Number.MAX_VALUE allein weiterhin endlich.

Ein vorzeichenbehafteter Nullwert beeinflusst das Vorzeichen der Division: Ein negativer endlicher Wert geteilt durch +0 ergibt -Infinity, geteilt durch -0 dagegen Infinity. Sie können die benannte Konstante auch direkt verwenden, wenn eine Berechnung die Absicht weniger klar ausdrückt:

const lowerBound = Number.NEGATIVE_INFINITY;

Diese Deklaration veranschaulicht die Syntax und erzeugt keine Ausgabe. Insbesondere ist Number.NEGATIVE_INFINITY eine Eigenschaft des eingebauten Number-Objekts und keine Variable, die deklariert werden muss.

So vergleichen und erkennen Sie negative Unendlichkeit

Strikte Gleichheit ist eine direkte Prüfung, wenn Sie genau diesen Wert erkennen müssen. Relationale Vergleiche eignen sich, wenn Sie feststellen möchten, ob ein Wert an oder unter einem Grenzwert liegt. Number.isFinite unterscheidet alle endlichen Zahlen sowohl von den beiden Unendlichkeiten als auch von NaN.

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

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

Damit lassen sich ein großer endlicher negativer Wert und negative Unendlichkeit unterscheiden; positive Unendlichkeit und NaN werden einem separaten Ergebnis zugeordnet. Die unveränderten Ausgaben des Beispiels lauten finite und negative infinity und bleiben auf Englisch. Prüfen Sie nicht nur mit value < 0: Diese Bedingung trifft auch auf gewöhnliche endliche negative Zahlen zu. Auch Number.isFinite(value) allein reicht nicht aus, um zu erkennen, welchen nicht endlichen Wert Sie haben. Vergleichen Sie mit Number.NEGATIVE_INFINITY, wenn diese Unterscheidung wichtig ist.

Rechenverhalten und Sonderfälle

Wird negative Unendlichkeit mit einer positiven endlichen Zahl multipliziert, bleibt das Ergebnis negative Unendlichkeit; bei der Multiplikation mit einer negativen endlichen Zahl wird es zu positiver Unendlichkeit. Die Division durch eine positive endliche Zahl erhält das Vorzeichen, während die Division durch eine negative endliche Zahl es umkehrt. Addiert oder subtrahiert man einen endlichen Wert, bleibt das Ergebnis negative Unendlichkeit.

Manche Kombinationen ergeben keine Unendlichkeit. Die Addition positiver und negativer Unendlichkeit, die Multiplikation einer der beiden Unendlichkeiten mit null oder die Division einer Unendlichkeit durch eine Unendlichkeit ergibt NaN. Bei der Division durch vorzeichenbehaftete Null hängt das Ergebnis von den Vorzeichen beider Operanden ab. Diese Regeln sind wichtig, wenn eine Berechnung späteren Vergleichen zugrunde liegt: NaN verhält sich nicht wie eine der beiden Unendlichkeiten, und jeder geordnete Vergleich mit NaN ist falsch.

Dasselbe Vorzeichenverhalten gilt bei endlichen Überläufen: Eine Operation, deren mathematisches Ergebnis außerhalb des darstellbaren Bereichs liegt, kann eine Unendlichkeit mit dem Vorzeichen des Ergebnisses liefern. Das ist ein numerisches Ergebnis und keine ausgelöste Ausnahme. Code, der einen Überlauf zurückweisen muss, sollte das Ergebnis daher ausdrücklich prüfen, zum Beispiel mit Number.isFinite.

Praktische Anwendungen und Grenzen

Negative Unendlichkeit eignet sich als Startwert für eine Maximumsuche, da jeder endliche Kandidat größer ist. Bei einer leeren Sammlung bleibt das Ergebnis jedoch -Infinity. Entscheiden Sie, ob dieser Wert für den Aufrufer sinnvoll ist oder ob die Funktion eine leere Eingabe gesondert melden sollte. Ein kurzes Beispiel für die Maximumsuche:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

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

Dieses Muster setzt voraus, dass die Eingaben Zahlen sind und -Infinity für eine leere iterierbare Sammlung ein akzeptables Ergebnis ist. Falls die Eingaben NaN enthalten können, sind Vergleiche damit falsch. Prüfen oder filtern Sie die Werte daher entsprechend den Vorgaben der Anwendung.

Verwenden Sie negative Unendlichkeit nicht als allgemeines Fehlersignal: Sie ist ein gültiges numerisches Ergebnis, und ohne zusätzliche Vereinbarung können Aufrufer einen Fehler möglicherweise nicht von einer Berechnung unterscheiden. Als Startwert für eine Minimumsuche ist sie ebenfalls ungeeignet, da kein endlicher Kandidat kleiner ist. Eine Minimumsuche beginnt typischerweise mit Infinity oder dem ersten gültigen Element und legt ausdrücklich fest, wie eine leere Eingabe behandelt wird. Als Ausgangswert für Summen oder Mittelwerte eignet sie sich nicht: Addiert man einen endlichen Wert zu ihr, bleibt das Ergebnis -Infinity, was die weitere Berechnung verfälscht.