Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

Math.sumPrecise()

Baseline 2026
Neu verfügbar

Seit April 2026 funktioniert diese Funktion auf aktuellen Geräten und in aktuellen Browserversionen. Auf älteren Geräten oder in älteren Browsern funktioniert sie möglicherweise nicht.

Die statische Methode Math.sumPrecise() nimmt ein Iterable von Zahlen entgegen und gibt deren Summe zurück. Sie ist präziser als das Addieren der Zahlen in einer Schleife, da sie Genauigkeitsverluste bei Zwischenergebnissen mit Gleitkommazahlen vermeidet.

Probieren Sie es aus

console.log(Math.sumPrecise([1, 2]));
// Expected output: 3

console.log(Math.sumPrecise([1e20, 0.1, -1e20]));
// Expected output: 0.1

Syntax

js
Math.sumPrecise(numbers)

Parameter

numbers

Ein Iterable von Zahlen (beispielsweise ein Array).

Rückgabewert

Eine Zahl, die der Summe der Zahlen im Iterable numbers entspricht. Ist das Iterable leer, lautet der Rückgabewert -0 (nicht 0).

Ausnahmen

TypeError

Wenn numbers kein Iterable ist oder wenn ein Wert im Iterable nicht vom Typ Number ist.

Beschreibung

Da sumPrecise() eine statische Methode von Math ist, verwenden Sie sie immer als Math.sumPrecise() und nicht als Methode eines von Ihnen erstellten Math-Objekts (Math ist kein Konstruktor).

Die Methode heißt Math.sumPrecise(), weil sie präziser ist als das einfache Addieren von Zahlen in einer Schleife. Betrachten Sie das folgende Beispiel:

js
let sum = 0;
const numbers = [1e20, 0.1, -1e20];
for (const number of numbers) {
  sum += number;
}
console.log(sum); // 0

Die Ausgabe ist 0. Der Grund dafür ist, dass 1e20 + 0.1 mit 64-Bit-Gleitkommazahlen nicht exakt dargestellt werden kann. Daher wird das Zwischenergebnis auf 1e20 gerundet. Die Summe von 1e20 und -1e20 ist dann 0, sodass auch das Endergebnis 0 ist.

Math.sumPrecise() vermeidet dieses Problem durch einen speziellen Summierungsalgorithmus. Die Methode verhält sich so, als würden die Gleitkommazahlen anhand ihrer exakten mathematischen Werte addiert und erst das Endergebnis in die nächstgelegene darstellbare 64-Bit-Gleitkommazahl umgewandelt. Das Genauigkeitsproblem bei 0.1 + 0.2 lässt sich dadurch allerdings nicht vermeiden:

js
console.log(Math.sumPrecise([0.1, 0.2])); // 0.30000000000000004

Das liegt daran, dass die Gleitkommazahl-Literale 0.1 und 0.2 bereits mathematische Werte darstellen, die größer als 0,1 beziehungsweise 0,2 sind. Die 64-Bit-Gleitkommazahl, die ihrer Summe am nächsten kommt, ist tatsächlich 0.30000000000000004.

Beispiele

Math.sumPrecise() verwenden

js
console.log(Math.sumPrecise([1, 2, 3])); // 6
console.log(Math.sumPrecise([1e20, 0.1, -1e20])); // 0.1

Spezifikationen

Spezifikation
ECMAScript® 2027 Language Specification
# sec-math.sumprecise

Browser-Kompatibilität

Siehe auch