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 July 2015.

Die statische Dateneigenschaft Number.EPSILON stellt den Unterschied zwischen 1 und der kleinsten Gleitkommazahl dar, 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ächstgrößeren Zahl im Number-Format, da das Doppelgenaue Gleitkommaformat nur 52 Bits verwendet, um die Mantisse darzustellen. Das niedrigste Bit hat dabei eine Bedeutung von 2-52.

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 wesentlich kleiner ist als Number.EPSILON.

Da EPSILON eine statische Eigenschaft von Number ist, wird sie immer als Number.EPSILON verwendet und nicht als Eigenschaft eines Zahlenwertes.

Beispiele

Gleichheit testen

Jedes Zahlencodierungssystem, das eine endliche Anzahl von Bits verwendet, unabhängig von der Basis (z. B. Dezimal oder Binär), kann notwendigerweise nicht alle Zahlen exakt darstellen, da versucht wird, eine unendliche Anzahl von Punkten auf der Zahlenlinie mit einer endlichen Menge an Speicher darzustellen. Zum Beispiel kann ein System mit Basis-10 (Dezimalsystem) 1/3 nicht exakt darstellen, und ein System mit Basis-2 (Binärsystem) kann 0.1 nicht exakt darstellen. So ist beispielsweise 0.1 + 0.2 nicht exakt 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 empfohlen, Gleitkommazahlen niemals mit === zu vergleichen. Stattdessen können zwei Zahlen als gleich angesehen werden, wenn sie nahe genug beieinander liegen. Die Konstante Number.EPSILON ist in der Regel eine vernünftige Schwelle für Fehler, wenn die Arithmetik ungefähr die Größenordnung von 1 hat, 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

Allerdings ist Number.EPSILON ungeeignet für Arithmetik auf einer größeren Größenordnung. Wenn Ihre Daten beispielsweise in der Größenordnung von 103 liegen, hat der Dezimalanteil eine viel geringere Genauigkeit als Number.EPSILON:

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 zu vergleichenden Zahlen eine Größenordnung von ungefähr 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

Zusätzlich zur Größenordnung ist es wichtig, die Genauigkeit Ihrer Eingaben zu berücksichtigen. Wenn die Zahlen beispielsweise aus einem Formularfeld stammen und der Eingabewert nur in Schritten von 0.1 angepasst werden kann (d. h. <input type="number" step="0.1">), ist es in der Regel sinnvoll, eine viel größere Toleranz zuzulassen, wie etwa 0.01, da die Daten nur eine Genauigkeit von 0.1 aufweisen.

Hinweis: Wichtiger Hinweis: Verwenden Sie Number.EPSILON nicht einfach als Schwelle für Gleichheitstests. Verwenden Sie eine Schwelle, die der Größenordnung und der Genauigkeit der Zahlen entspricht, die Sie vergleichen.

Spezifikationen

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

Browser-Kompatibilität

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
EPSILON

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

Siehe auch