ECMA262でのNumber Typeの仕様及び算術加算演算子における浮動小数点数の丸め

こんなツイートをしたのを思い出し、とりあえず仕様読んで調べたあたりのことをまとめて書く気持ちができた。

忙しいので少々雑だが、まあやっていきます。

IEEE754-2008

Number Typeの定義はECMA262を参照するとこちらにIEEE754-2008で内部表現されてるみたいなことが書いてありますね。

まあそれはそれです。とりあえず64bit浮動小数点数で扱われています。細かいことは読めばわかります。

算術加算演算子の仕様

こちらです。

こちらによると

In the remaining cases, where neither an infinity, nor a zero, nor NaN is involved, and the operands have the same sign or have different magnitudes, the sum is computed and rounded to the nearest representable value using IEEE 754-2008 round to nearest, ties to even mode. If the magnitude is too large to represent, the operation overflows and the result is then an infinity of appropriate sign. The ECMAScript language requires support of gradual underflow as defined by IEEE 754-2008.

とあり、浮動小数点数の演算の結果はIEEE754-2008を用いて最も近い偶数値に丸める(最近接偶数への丸め)とのことです。

最近接偶数への丸めに関してはこちらのサイトの解説が分かりやすいかと思います。

問題について

ナンセンスだと思います。

この問題が聞いていることはJavaScriptの問題というよりも、浮動小数点数の丸めに関する話ですね。

確かにこのことはJavaScriptの仕様を知らないとわからないことではあるのでJavaScriptの問題ともいえますが、JavaScript固有のことではないので、JavaScriptの問題!として書くのはちょっとどうなの、と思います。

まあ似たようなことはすでに各所で言われているのでアレです。

こちらからは以上です。