#はじめに
JavaScriptの数値がどのようにビットが立っているか知りたくなりました。
そこでFloat64Arrayをを使って表示してみました。
こちらの浮動小数点シミュレーターで比較したり、toString(2)で比較して一致しているのを確認しているので、numberでもメモリ上はFloat64Arrayと同じなのかな?って思っています。
#IEEE754について簡単に説明
IEEE754の64bitは以下のようになっております。
符号部(1bit) | 指数部(11bit) | 仮数部(52bit)
仮数部は先頭の1を省略するので、実質53bitです。
詳しくはググってください。
ここが分かりやすいと思います。
#プログラム
const float64 = new Float64Array(1);
float64[0] = 0.1; // ここで値を変更してください。
console.log(float64[0]);
const uint8 = new Uint8Array(float64.buffer);
const str = uint8.reduce((p, c) => ('00000000' + c.toString(2)).slice(-8) + p, '');
console.log(str);
#プログラム実行して比較
0.1と0.2でプログラムを実行して、
こちらの浮動小数点シミュレーターで比較したり、toString(2)で比較してみます。
###0.1をプログラム実行
###0.1を浮動小数点シミュレーターで実行
一致しています。
###0.1をtoString(2)
2番目の1から比較すると、仮数部が一致しています。