xutil.dev
ログイン

浮動小数点誤差チェッカー

0.1+0.2≠0.3の理由をIEEE 754のビットレベルで解説。期待値vs実際の計算結果・誤差をオンライン表示する無料プログラマー向けツール

入力
よくある例:
0.1 + 0.20.3 - 0.10.1 * 0.21.0 - 0.90.1 + 0.71e20 + 1 - 1e20
計算結果
数式:0.1 + 0.2期待値:0.3実際の結果:0.30000000000000004441絶対誤差:5.551115e-17相対誤差:1.8504e-14%
IEEE 754 表現 (64-bit double)
実際の結果: 0.30000000000000004
0
0
1
1
1
1
1
1
1
1
0
1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
1
0
0
符号指数部 (11-bit)仮数部 (52-bit)
期待値: 0.3
0
0
1
1
1
1
1
1
1
1
0
1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
なぜ誤差が生じるのか

コンピュータは数値をIEEE 754の2進浮動小数点数で表現します。10進数の0.1や0.2のような値は、2進数では無限小数となり、有限ビットでは正確に表現できません。これは10進数で1/3を正確に表現できないのと同じ原理です。そのため、計算結果に微小な丸め誤差が蓄積されることがあります。