IEEE 754 あいとりぷるいー ななごよん コンピュータ基礎 用語集 › 📐 コンピュータ基礎 › IEEE 754
【あいとりぷるいー ななごよん】
IEEE 754 とは?
💡 コンピュータが小数を扱うための「世界共通のルールブック」
📌 このページのポイント
- 符号ビット・指数部・仮数部の3フィールドで浮動小数点数を表現する
- 32ビット(単精度)と64ビット(倍精度)が最もよく使われる
- 0.1 + 0.2 が 0.3 にならない「浮動小数点誤差」の原因でもある
- NaN(非数)や無限大(Infinity)などの特殊値も規格で定義されている
IEEE 754 単精度・倍精度のビットレイアウトと特殊値
ひよこ IEEE 754ってよく聞くけど、何を決めてる規格なの?
ペンギン先生 コンピュータが小数を扱うときの「表現方法」を統一した規格だよ。昔はメーカーごとに小数の扱い方がバラバラで、同じ計算でも結果が違うことがあったんだ。IEEE 754のおかげで、どのCPUでも同じ方式で小数を表せるようになったよ。
ひよこ
ペンギン先生 数値を「符号」「指数部」「仮数部」の3つに分解するんだ。例えば64ビットの倍精度なら、符号1ビット・指数11ビット・仮数52ビットで合計64ビット。科学的記数法の「±1.xxx × 2^n」をビットで表現していると思えばいいよ。
ひよこ 0.1 + 0.2 が 0.3 にならないのもこの規格のせいなの?
ペンギン先生 正確には「せい」というより「仕組み上の限界」だね。0.1 は二進数では無限小数になるから、有限ビットに丸める必要がある。その丸め誤差が積み重なって 0.30000000000000004 のような結果になるんだ。これはIEEE 754の設計上、避けられないことだよ。
ひよこ NaN とか Infinity も IEEE 754 で決まってるの?
ペンギン先生 そうだよ。指数部が全ビット1のとき、仮数部が0なら無限大(Infinity)、0でなければNaN(Not a Number)と定義されている。0÷0の結果はNaN、1÷0の結果はInfinityになるのも、この規格で決まったルールなんだ。
ひよこ お金の計算みたいに正確さが必要なときはどうするの?
ペンギン先生 金融計算では浮動小数点数を使わず、整数で「何円」「何セント」と扱うか、Decimal型(固定小数点)を使うのが鉄則だよ。JavaのBigDecimal、PythonのDecimalモジュールなどがその例だね。
ひよこ プログラマーとしてはどこまで意識しておけばいいの?
ペンギン先生 「浮動小数点数の比較は == ではなく誤差許容範囲(イプシロン)で判定する」「お金の計算にはfloat/doubleを使わない」この2つを覚えておけば実務では十分だよ。あと、denormalized number(非正規化数)の存在も知っておくと、極小値付近の計算で精度が落ちる理由が分かるようになるよ。
まとめ:ざっくりこれだけ覚えればOK!
「IEEE 754」って出てきたら「コンピュータが小数を表す世界標準のルール」と思えればだいたいOK!
📖 おまけ:英語の意味
「IEEE 754 Standard for Floating-Point Arithmetic」 = IEEE(米国電気電子学会)の浮動小数点演算規格 第754号 💬 1985年に初版が策定され、ほぼすべてのCPUがこの規格に従って小数を計算しているんだよ
← 用語集にもどる