2018-4-9

ECMAScriptの浮動小数点の内部表現に関して

技術

ECMAScriptではNumberは64ビット倍精度浮動小数点方式

なので

  • 符号:1 ビット(0 が正、1 が負)
  • 指数部:11 ビット
  • 仮数部:52 ビット

例えば、3は内部的には

0100 0000 0000 1000
0000 0000 0000 0000
0000 0000 0000 0000
0000 0000 0000 0000

という表現になる

これは

  • 符号:0
  • 指数部:100 0000 0000
  • 仮数部:1000 0000 0000 ...

となる。

符号は0が正、1が負を表すので、今回は正。

指数部は 10 進数に変換すると1024。ここから 64 ビット倍精度浮動小数点方式の場合は-1023して結果的に1となる。

仮数部は 1 の位が 1 の少数と決まっており、今回の場合は1.10000000...、つまり1.1となる。(2 進数であることに注意)

(例えば、仮数部が0010 0000 0000 ....の場合は、1.001となる)

よって

0b1.1 * 2^1
= 0b11
= 3

という結果になる。

参考

浮動小数点数について復習してみた - Qiita

IEEE 754 - Wikipedia