IEEE 754 浮動小数点ビット分解 (binary16 / binary32 / binary64)
10 進数を IEEE 754 浮動小数点 (binary16 / binary32 / binary64) のビット列・16 進表現に分解し、 符号・指数・仮数の内訳と実際に表現される値・誤差を可視化するツール。 「0.1 + 0.2 が 0.3 にならない」 理由が一目で分かる。 16 進・ビット列からの逆引きも対応。
IEEE 754 浮動小数点ビット分解 (binary16 / binary32 / binary64)について
IEEE 754 浮動小数点ビット分解ツールとは
10進文字列を IEEE 754 の binary16 / binary32 / binary64 へ変換し、符号・指数・仮数、ビット列、16進表現を表示します。16進・ビット列から、有限値は正確な10進値へ、特殊値は±InfinityまたはNaNとして逆引きできます。
10進入力はJavaScriptの Number へ先に変換せず、有理数として読み取って選択形式へ最近接偶数丸めを1回だけ適用します。そのため、binary64の「0.1」も正確な復元値 0.1000000000000000055511151231257827021181583404541015625 と、入力文字列との差を確認できます。
3つの形式と表示できる境界
- binary16 (half): 符号1 + 指数5 + 仮数10 bit、バイアス15。最大有限値65,504、10進精度は約3.3桁
- binary32 (single): 符号1 + 指数8 + 仮数23 bit、バイアス127。10進精度は約7.2桁
- binary64 (double): 符号1 + 指数11 + 仮数52 bit、バイアス1023。JavaScriptのNumberが採用し、10進精度は約15.9桁
10進入力は最大1,200文字、指数表記は±400までです。有限値、±0、非正規化数、±Infinity、NaNに対応します。16進・ビット入力では、空白とアンダースコアを区切りとして省略でき、生入力は最大256文字です。
同じ「0.1」の絶対誤差は、binary16で 0.0000244140625、binary32で 0.000000001490116119384765625、binary64で 0.0000000000000000055511151231257827021181583404541015625 です。
「0.1 + 0.2 ≠ 0.3」の正体
10進の0.1は2進では循環小数になります。有限個の仮数bitへ収めるときに丸めが入り、0.1や0.2の格納値は入力した10進分数とわずかに異なります。
0.3 hex = 3FD3333333333333
0.1 + 0.2 hex = 3FD3333333333334
この2値の差は約5.55×10⁻¹⁷です。特定の計算結果を厳密比較すると一致しませんが、整数や同一表現を判定する場面では厳密比較が適切な場合もあります。許容誤差は値の規模と用途に応じて決めてください。詳しくは関連記事で解説しています。
実務での注意点
- 近似計算の比較: 固定の
Number.EPSILONだけに頼らず、値の規模と許容する絶対・相対誤差を決める - 金額計算: 要件に合う最小単位の整数または10進型を使い、端数処理規則を明示する
- 大きな整数: JavaScriptで整数を他の整数と衝突せず安全に扱える範囲は、絶対値が
Number.MAX_SAFE_INTEGER以下。253自体は表現できますが、253+1と同じ格納値になるため安全な整数ではありません。範囲外はBigIntや文字列を検討する - NaN:
NaN === NaNはfalse。JavaScriptではNumber.isNaN()を使う
よくある質問
- Q. なぜ0.1 + 0.2が0.3にならない?
- 0.1と0.2は2進では有限桁にできず、binary64へ格納するときに丸められます。加算結果は、10進の0.3を単独でbinary64へ丸めた値より1 ULP大きい値になります。
- Q. binary16 / binary32 / binary64はどう使い分ける?
- 必要な範囲、精度、メモリ量、利用環境で決めます。JavaScriptのNumberはbinary64です。GPU・画像・機械学習などではbinary16やbinary32も使われますが、実際に対応する形式はAPIやハードウェアごとに確認が必要です。
- Q. 10進入力はどのように丸めていますか?
- 入力文字列を正確な有理数として解析し、選択した形式へround-to-nearest, ties-to-even(最近接偶数丸め)で直接変換します。JavaScript Numberやbinary32を途中に挟まないため、中点付近の二重丸めを避けます。
- Q. 16進やビット列から復元できますか?
- できます。16進またはビットへ切り替えると、現在値を同じ形式へ変換してから編集できます。形式を切り替えた場合も、現在の数値を新しい形式へ丸め直します。NaNのpayloadは16進・ビット表示で確認でき、同じ浮動小数点形式のまま入力表現だけを切り替える場合は保持されます。10進欄の編集または浮動小数点形式の変更ではこのツールの既定NaNへ置き換わります。
出典・参考文献
関連ツール
進数変換ツール
2進数・8進数・10進数・16進数を相互変換。リアルタイム同時表示、ビット数計算、プレフィックス自動判別。BigInt対応で64bit超の大きな数値も変換可能。
ハッシュ生成ツール
テキストからMD5・SHA-1・SHA-256・SHA-384・SHA-512のハッシュ値を即時生成。HEX・Base64形式出力、全アルゴリズム一括生成に対応。
chmod 計算機 (8 進 ↔ rwx ↔ ugo 相互変換)
Unix/Linux のファイルパーミッションを 8 進数 (755 等) ↔ シンボリック (rwxr-xr-x) ↔ 特殊ビットまで明示する完全ugo表記で相互変換するツール。 setuid / setgid / sticky に対応し、 755 / 644 / 600 / 1777 などよく使う例のプリセット付き。


