Number.EPSILON

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2015.

Die statische Dateneigenschaft Number.EPSILON repräsentiert den Unterschied zwischen 1 und der kleinsten Gleitkommazahl, die größer als 1 ist.

Probieren Sie es aus

const result = Math.abs(0.2 - 0.3 + 0.1);

console.log(result);
// Expected output: 2.7755575615628914e-17

console.log(result < Number.EPSILON);
// Expected output: true

Wert

2-52, oder ungefähr 2.2204460492503130808472633361816E-16.

Eigenschaften von Number.EPSILON
Schreibbarnein
Aufzählbarnein
Konfigurierbarnein

Beschreibung

Number.EPSILON ist der Unterschied zwischen 1 und der nächsten größeren Zahl, die im Number-Format darstellbar ist, da das Double-Precision Floating-Point-Format nur 52 Bits verwendet, um die Mantisse darzustellen, und das niedrigste Bit eine Bedeutung von 2-52 hat.

Beachten Sie, dass die absolute Genauigkeit von Gleitkommazahlen abnimmt, je größer die Zahl wird, da der Exponent wächst, während die Genauigkeit der Mantisse gleich bleibt. Number.MIN_VALUE ist die kleinste darstellbare positive Zahl, die viel kleiner als Number.EPSILON ist.

Da EPSILON eine statische Eigenschaft von Number ist, verwenden Sie es immer als Number.EPSILON und nicht als Eigenschaft eines Zahlenwerts.

Beispiele

Gleichheit testen

Jedes Zahlencodierungssystem, das eine endliche Anzahl von Bits verwendet, unabhängig von der Basis (z. B. dezimal oder binär), wird notwendigerweise nicht in der Lage sein, alle Zahlen genau darzustellen, da Sie versuchen, eine unendliche Anzahl von Punkten auf der Zahlenlinie mit einer begrenzten Menge an Speicher darzustellen. Beispielsweise kann ein Basis-10-System (dezimal) 1/3 nicht genau darstellen und ein Basis-2-System (binär) kann 0.1 nicht genau darstellen. Daher ist zum Beispiel 0.1 + 0.2 nicht genau gleich 0.3:

js
console.log(0.1 + 0.2); // 0.30000000000000004
console.log(0.1 + 0.2 === 0.3); // false

Aus diesem Grund wird oft geraten, dass Gleitkommazahlen niemals mit === verglichen werden sollten. Stattdessen können wir zwei Zahlen als gleich betrachten, wenn sie nahe genug beieinander liegen. Die Konstante Number.EPSILON ist normalerweise ein angemessener Schwellenwert für Fehler, wenn die Arithmetik um die Größenordnung von 1 liegt, da EPSILON im Wesentlichen angibt, wie genau die Zahl "1" ist.

js
function equal(x, y) {
  return Math.abs(x - y) < Number.EPSILON;
}

const x = 0.2;
const y = 0.3;
const z = 0.1;
console.log(equal(x + z, y)); // true

Jedoch ist Number.EPSILON ungeeignet für jede Arithmetik, die auf einer größeren Größenordnung basiert. Wenn Ihre Daten die Größenordnung 103 haben, wird der Dezimalteil eine viel geringere Genauigkeit als Number.EPSILON aufweisen:

js
function equal(x, y) {
  return Math.abs(x - y) < Number.EPSILON;
}

const x = 1000.1;
const y = 1000.2;
const z = 2000.3;
console.log(x + y); // 2000.3000000000002; error of 10^-13 instead of 10^-16
console.log(equal(x + y, z)); // false

In diesem Fall ist eine größere Toleranz erforderlich. Da die verglichenen Zahlen eine Größenordnung von etwa 2000 haben, schafft ein Multiplikator wie 2000 * Number.EPSILON genügend Toleranz für diesen Fall.

js
function equal(x, y, tolerance = Number.EPSILON) {
  return Math.abs(x - y) < tolerance;
}

const x = 1000.1;
const y = 1000.2;
const z = 2000.3;
console.log(equal(x + y, z, 2000 * Number.EPSILON)); // true

Neben der Größenordnung ist es wichtig, die Genauigkeit Ihrer Eingabe zu berücksichtigen. Zum Beispiel, wenn die Zahlen aus einem Formulareingabefeld gesammelt werden und der Eingabewert nur in Schritten von 0.1 angepasst werden kann (z. B. <input type="number" step="0.1">), ergibt es normalerweise Sinn, eine viel größere Toleranz zuzulassen, wie 0.01, da die Daten nur eine Genauigkeit von 0.1 haben.

Hinweis: Wichtige Erkenntnis: Nutzen Sie nicht einfach Number.EPSILON als Schwellenwert für Gleichheitstests. Verwenden Sie einen Schwellenwert, der für die Größenordnung und Genauigkeit der Zahlen, die Sie vergleichen, angemessen ist.

Spezifikationen

Specification
ECMAScript® 2026 Language Specification
# sec-number.epsilon

Browser-Kompatibilität

Siehe auch