| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Math/sumPrecise | [Back] [Original] |
Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen bersetzt, und kann Fehler enthalten. Erfahre mehr ber dieses Experiment.
Seit April 2026 funktioniert diese Funktion auf aktuellen Gerten und in aktuellen Browserversionen. Auf lteren Gerten oder in lteren Browsern funktioniert sie mglicherweise nicht.
Die statische Methode Math.sumPrecise() nimmt ein Iterable von Zahlen an und gibt deren Summe zurck. Sie ist genauer als das Aufsummieren in einer Schleife, da sie den Verlust an Genauigkeit bei Gleitkommazahlen in Zwischenergebnissen vermeidet.
console.log(Math.sumPrecise([1, 2]));
// Expected output: 3
console.log(Math.sumPrecise([1e20, 0.1, -1e20]));
// Expected output: 0.1
Math.sumPrecise(numbers)
Eine Zahl, die die Summe der Zahlen im numbers Iterable ist. Wenn das Iterable leer ist, ist der Rckgabewert -0 (nicht 0).
TypeErrorWenn numbers kein Iterable ist oder wenn eine der Zahlen im Iterable nicht vom Typ Zahl ist.
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 wird Math.sumPrecise() genannt, weil sie genauer ist als das naive Aufsummieren 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
Das Ergebnis ist 0. Dies liegt daran, dass 1e20 + 0.1 nicht przise in 64-Bit-Gleitkommazahlen dargestellt werden kann und daher das Zwischenergebnis auf 1e20 gerundet wird. Dann ist die Summe von 1e20 und -1e20 0, sodass das Endergebnis 0 ist.
Math.sumPrecise() umgeht dieses Problem, indem ein spezieller Summierungsalgorithmus verwendet wird. Es funktioniert so, als ob die Gleitkommazahlen unter Verwendung ihrer exakten mathematischen Werte aufaddiert werden, und das Endergebnis wird dann in die nchstliegende darstellbare 64-Bit-Fliekommazahl umgewandelt. Dies kann dennoch das 0.1 + 0.2-Przisionsproblem nicht vermeiden:
console.log(Math.sumPrecise([0.1, 0.2])); // 0.30000000000000004
Da die Gleitkommaliterale 0.1 und 0.2 bereits mathematische Werte darstellen, die grer als 0.1 und 0.2 sind, und die nchstliegende 64-Bit-Gleitkommadarstellung ihrer Summe tatschlich 0.30000000000000004 ist.
console.log(Math.sumPrecise([1, 2, 3])); // 6
console.log(Math.sumPrecise([1e20, 0.1, -1e20])); // 0.1
| Spezifikation |
|---|
| ECMAScript 2027 LanguageSpecification # sec-math.sumprecise |
Math.sumPrecise in core-jsMath.sumPreciseArray.prototype.reduce()MathDer Bauplan fr ein besseres Internet.
Teile dieses Inhalts sind 19982026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfgbar unter einer Creative-Commons-Lizenz.
| Web Proxy Viewer | New URL | Original Page |