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
Math.sumPrecise(numbers)
Parameter
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
numberskein 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:
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:
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
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> |