【あいとりぷるいー ななごよん】

IEEE 754 とは?

最終更新:
💡 小数の表し方と計算の共通ルール

浮動小数点数の形式、丸め方、計算や特殊値の扱いを定める国際規格。コンピューターで小数を扱うための共通ルール。

📌 このページのポイント
IEEE 754:小数を分けて保存する代表的な2進数形式のビット構造binary32:合計32ビット符号1ビット指数8ビット保存する仮数部分23ビットbinary64:合計64ビット符号1ビット指数11ビット保存する仮数部分52ビット丸め方や、無限大・NaNの扱いも共通化0.1などは、2進数で正確に書き切れない
色は符号・指数・保存する仮数部分を表し、箱の幅はビット数に比例していません。通常の数は先頭の1を省略して保存するため、精度は24・53ビットです。
ひよこ ひよこ
IEEE 754って、何のルールなの?
ペンギン先生 ペンギン先生
小数を浮動小数点数として表し、計算するための規格だよ。数を保存する形式に加えて、桁に収まらないときの丸め方、無限大やNaNという特殊な値などの扱いも定めているんだ。
ひよこ ひよこ
浮動小数点数は、どうやって数を保存するの?
ペンギン先生 ペンギン先生
代表的な2進数形式では、プラス・マイナスを表す符号、数の大きさの倍率を表す指数、細かな数字を表す仮数に分けるよ。binary32は符号1・指数8・保存する仮数部分23ビット、binary64は1・11・52ビットだ。通常の数では先頭の1を省略して保存するので、精度はそれぞれ24・53ビットになるんだ。
ひよこ ひよこ
0.1を足すと、少しずれることがあるのはなぜ?
ペンギン先生 ペンギン先生
10進数で1/3を0.333…と書き切れないように、0.1は2進数では書き切れないんだ。有限の桁に丸めて保存するため、計算結果にも差が現れることがある。たとえば一般的なPythonのfloatで0.1 + 0.2を表示すると0.30000000000000004になる。計算や表示の仕方によって、差が見えないこともあるよ。
ひよこ ひよこ
InfinityやNaNも、この規格に関係する?
ペンギン先生 ペンギン先生
うん。正負の無限大、正負のゼロ、数として扱えないNaNなどがあるよ。たとえばJavaの浮動小数点演算では1.0 / 0.0はInfinity、0.0 / 0.0はNaNになる。ただし整数の割り算や別の言語では例外になる場合もあり、どの計算でも同じ結果になるわけではないんだ。
ひよこ ひよこ
誤差があるなら、小数を使わないほうがいい?
ペンギン先生 ペンギン先生
目的に合う型を選べばいいんだ。測定値や科学計算では浮動小数点数が役立つ。近い値を比較するなら、値の大きさや用途に合う許容誤差を考えよう。金額のように10進数の桁や丸めが重要な場合は、Decimalなどの10進数型や、最小単位を整数で扱う方法を検討するよ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「IEEE 754」って出てきたら「コンピューターで小数を扱う共通ルール」と思えばだいたいOK!
📖 おまけ:英語の意味
「IEEE 754」 = IEEEが定めた浮動小数点演算の規格番号
💬 IEEEは技術分野の標準を策定する団体。754は規格を識別する番号で、数値の桁数を表しているわけではないよ。

参考資料

← 用語集にもどる