Help us understand the problem. What is going on with this article?

【JavaScript】numberのビットを見る【IEEE754】

はじめに

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をプログラム実行

01pg.png

0.1を浮動小数点シミュレーターで実行

一致しています。
01pg.png

0.1をtoString(2)

2番目の1から比較すると、仮数部が一致しています。
01_02.png

0.2をプログラム実行

02pg.png

0.2を浮動小数点シミュレーターで実行

一致しています。
02simu.png

0.2をtoString(2)

2番目の1から比較すると、仮数部が一致しています。
02_02.png

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした