Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in English Always switch to English

Math : méthode statique sumPrecise()

Baseline 2026
Nouvellement disponible

Depuis avril 2026, cette fonctionnalité fonctionne sur les appareils et les versions de navigateur les plus récents. Elle peut ne pas fonctionner sur les appareils ou navigateurs plus anciens.

La méthode statique Math.sumPrecise() prend un itérable de nombres et retourne leur somme. Elle est plus précise que de les additionner dans une boucle, car elle évite la perte de précision des nombres à virgule flottante dans les résultats intermédiaires.

Exemple interactif

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

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

Syntaxe

js
Math.sumPrecise(numbers)

Paramètres

numbers

Un itérable (tel qu'un tableau (Array)) de nombres.

Valeur de retour

Un nombre qui est la somme des nombres dans l'itérable numbers. Si l'itérable est vide, la valeur de retour est -0 (et non 0).

Exceptions

TypeError

Si numbers n'est pas un itérable, ou si l'un des nombres dans l'itérable n'est pas du type nombre.

Description

Puisque sumPrecise() est une méthode statique de Math, vous devez toujours l'utiliser comme Math.sumPrecise(), plutôt que comme une méthode d'un objet Math que vous avez créé (Math n'est pas un constructeur).

La méthode s'appelle Math.sumPrecise(), car elle est plus précise que de sommer naïvement les nombres dans une boucle. Considérez l'exemple suivant :

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

La sortie est 0. Cela est dû au fait que 1e20 + 0.1 ne peut pas être représenté précisément dans les flottants 64 bits, donc le résultat intermédiaire est arrondi à 1e20. Ensuite, la somme de 1e20 et -1e20 est 0, donc le résultat final est 0.

Math.sumPrecise() évite ce problème en utilisant un algorithme de sommation spécialisé. Cela fonctionne comme si les nombres à virgule flottante sont additionnés en utilisant leurs valeurs mathématiques précises, et le résultat final est ensuite converti en le flottant 64 bits représentable le plus proche. Cela ne peut toujours pas éviter le problème de précision de 0.1 + 0.2 :

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

Parce que les littéraux à virgule flottante 0.1 et 0.2 représentent déjà des valeurs mathématiques supérieures à 0.1 et 0.2, et que la représentation en flottant 64 bits la plus proche de leur somme est en réalité 0.30000000000000004.

Exemples

Utiliser Math.sumPrecise()

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

Spécifications

Spécification
ECMAScript® 2027 Language Specification
# sec-math.sumprecise

Compatibilité des navigateurs

Voir aussi