JSConf JP

Math.sumPreciseから学ぶ、ECMAScript仕様の数値の種類

LTトラックCJapanese

ECMAScriptの仕様には、4種類の数値が登場します。

一般的に知られているのは「Number」と「BigInt」の2つですが、それ以外に、ECMAScriptのプログラムから直接扱う値ではなく、仕様の記述のみに用いられる「Mathematical values」と、それを拡張した「Extended mathematical values」が存在します。 Numberが64ビット浮動小数点数である一方、Mathematical valuesは任意の実数を表します。そのため、Mathematical valuesを用いた仕様上の計算では、浮動小数点数の丸めによる誤差が発生しません。

ECMAScript 2026で追加された Math.sumPrecise では、高精度な加算を定義するために、このMathematical valuesの特徴を活かして仕様が記述されています。

本セッションでは、実際のMath.sumPreciseの仕様などを取り上げながら、ECMAScript仕様において、上記4種類の数値がどのように扱われているかを紹介します。 𝔽(x)やℝ(x)といった、ECMAScript仕様を読むうえで必要となる数値の表記についても説明します。

本セッションを通じて、最新の仕様を含む、ECMAScript仕様に登場する数値を正しく読み分けるための、基礎的な知識を身につけることを目指します。