コンテンツにスキップ

浮動小数点数

浮動小数点数とは

浮動小数点数はコンピュータで実数を扱う方式の一つ。

符号部、指数部、仮数部の 3 つを組み合わせて実数を表現する。

単精度浮動小数点数(float)

以下は IEEE754 形式の 単精度浮動小数点数である。

符号部 1 ビット、指数部 8 ビット、仮数部 23 ビットの計 32 ビットで実数を表現する。

以下は単精度浮動小数点数の例である。

符号部 指数部 仮数部
0 01111100 0100000000000000000000

符号部、指数部、仮数部から以下のように実数を求める。

\[ 値 = (-1)^{符号部} \times (1 + {仮数部}) \times 2^{{指数部} - 127} \]

符号部は正負を示し、仮数部は小数を示し、指数はオーダーを示す。

小数は 2 進数なので\(2^{-1} + 2^{-2} + 2^{-3}\)...のような 2 の累乗の足し算で表現できる範囲の近似値になる。

教訓

コンピュータでは実数は 2 の累乗で表現するため、2 の累乗で表せない実数は誤差が出る。

JavaScript
1
2
3
0.25 + 0.25 == 0.5; // true (0.25は2^-2なので誤差は出ない)
1.5 + 1.5 == 3.0; // true (1.5は2^0 + 2^-1なので誤差は出ない)
0.1 + 0.2 == 0.3; // false (0.1は2の累乗で表せないので誤差が出る。つまりコンピュータにおける0.1は実世界の0.1じゃない。0.2も同様)