Math.sumPrecise()
Baseline
2026
Newly available
Since April 2026, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.
Math.sumPrecise() ã¯éçã¡ã½ããã§ãæ°å¤ã®å復å¯è½ãªãã¸ã§ã¯ããåãåãããããã®åãè¿ãã¾ããã«ã¼ãã§åè¨ããããã精度ãé«ããä¸éçµæã«ãããæµ®åå°æ°ç¹ç²¾åº¦ã®æå¤±ãåé¿ãã¾ãã
試ãã¦ã¿ã¾ããã
console.log(Math.sumPrecise([1, 2]));
// äºæ³ãããçµæ: 3
console.log(Math.sumPrecise([1e20, 0.1, -1e20]));
// äºæ³ãããçµæ: 0.1
æ§æ
Math.sumPrecise(numbers)
弿°
numbers-
æ°å¤ã®å復å¯è½ãªãã¸ã§ã¯ãï¼
Arrayãªã©ï¼ã
è¿å¤
numbers å復å¯è½ãªãã¸ã§ã¯ãå
ã®æ°å¤ã®åã¨ãªãæ°å¤ãå復å¯è½ãªãã¸ã§ã¯ãã空ã®å ´åãè¿å¤ã¯ -0 ã¨ãªãã¾ãï¼0 ã§ã¯ããã¾ããï¼ã
ä¾å¤
TypeError-
numbersãå復å¯è½ã§ãªãå ´åãã¾ãã¯å復å¯è½ãªãã¸ã§ã¯ãå ã®ããããã®å¤ãæ°å¤åã§ãªãå ´åã
解説
sumPrecise() 㯠Math ã®éçã¡ã½ããã§ããããã常㫠Math.sumPrecise() ã¨ãã¦ä½¿ç¨ãã¾ãã使ãã Math ãªãã¸ã§ã¯ãã®ã¡ã½ããã¨ãã¦ä½¿ç¨ãããã¨ã¯ã§ãã¾ããï¼Math ã¯ã³ã³ã¹ãã©ã¯ã¿ã¼ã§ã¯ããã¾ããï¼ã
ãã®ã¡ã½ãã㯠Math.sumPrecise() ã¨å¼ã°ãã¾ãããªããªããåç´ãªã«ã¼ãã§æ°å¤ãåè¨ããããã精度ãé«ãããã§ããæ¬¡ã®ä¾ãèãã¦ã¿ã¾ãããã
let sum = 0;
const numbers = [1e20, 0.1, -1e20];
for (const number of numbers) {
sum += number;
}
console.log(sum); // 0
åºå㯠0 ã§ãããã㯠1e20 + 0.1 ã 64 ãããæµ®åå°æ°ç¹æ°ã§æ£ç¢ºã«è¡¨ç¾ã§ããªããããä¸éçµæã 1e20 ã«ä¸¸ããããããã§ãããã®å¾ã1e20 㨠-1e20 ã®å㯠0 ã¨ãªããããæçµçµæã¯ 0 ã¨ãªãã¾ãã
Math.sumPrecise() ã¯ãç¹æ®ãªå ç®ã¢ã«ã´ãªãºã ã使ç¨ãããã¨ã§ãã®åé¡ãåé¿ãã¾ããæµ®åå°æ°ç¹æ°ããã®æ£ç¢ºãªæ°å¦çå¤ãç¨ãã¦å ç®ãããæçµçµæã表ç¾å¯è½ãª 64 ãããæµ®åå°æ°ç¹æ°ã«æãè¿ãå¤ã«å¤æããããã®ããã«åä½ãã¾ãããã ããããã§ã 0.1 + 0.2 ã®ç²¾åº¦åé¡ã¯åé¿ã§ãã¾ããã
console.log(Math.sumPrecise([0.1, 0.2])); // 0.30000000000000004
æµ®åå°æ°ç¹ãªãã©ã« 0.1 㨠0.2 ã¯æ¢ã« 0.1 ã 0.2 ããã大ããªæ°å¦çå¤ã表ãã¦ããããããã®åã®æãè¿ã 64 ãããæµ®åå°æ°ç¹è¡¨ç¾ã¯å®éã«ã¯ 0.30000000000000004 ã§ããããã§ãã
ä¾
>Math.sumPrecise() ã®ä½¿ç¨
console.log(Math.sumPrecise([1, 2, 3])); // 6
console.log(Math.sumPrecise([1e20, 0.1, -1e20])); // 0.1
仿§æ¸
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-math.sumprecise> |