これまでコンピュータ上での小数点数についてきちんと学んだことがなく、「浮動小数点数が小数を表す」くらいの理解しかしていなかった。
プログラムはなぜ動くのかを読んで調べたので備忘録。
小数点数の計算は誤差が生じることがある
- 小数点数の中には二進数では正確に表すことができない値がある
- 正確に表すことができない値は計算上では近似値で扱われる
- 近似値を用いる計算は誤差が生じる可能性がある
浮動小数点数
- コンピュータ内では小数点数を 浮動小数点数 で表す
- 倍精度浮動小数点数は64bit、単精度浮動小数点数は32bitで表す
- IEEE754に準拠した表現だと、符号部、仮数、指数、基数のパーツから成る
- 基数部は必ず2になる為、bitとして保持しない
- 符号部は0なら正、1なら負の数
- つまり仮数部に2の指数部乗を乗じた値で小数点数を表す
- 仮数部は小数点数以上の値を1に固定して表現する
- e.g.) 11.01 -> 1.101
- 1は1bitとして保持しない
- 指数部はイクセス表現で表現する
- 中央の値をゼロとみなす
- 0からの差で値を表現する
- e.g.) 8bitなら127が0、128は1、126は-1