フラミナル

考え方や調べたことを書き殴ります。IT技術系記事多め

浮動小数点演算について軽くまとめる

  • 固定小数点
  • 浮動小数点

という2種類の概念がある。

固定小数点

固定小数点は int(32bit) や long(64bit) といった固定桁数の中で表現可能な範囲で小数を表現する方式。そのためこの範囲の計算に収まる限りは誤差が発生しない。

ただし算術の結果、int や long の桁を超える場合には正確に表現できなくなる。

浮動小数点

int や long の bit 数ではとても表現できない大きい or 小さい数を表現する時に、近似値として使う型の一種。

仮数 * 基数 ^ 指数 の計算式で表現し、これを bit に落とし込むことで近い値を表現することができる。そのため厳密な計算が必要な場合は利用が推奨されない。

そもそもなぜずれるかというと、仮数に対して 10N をかけているだけなので、仮数で表現できる範囲しか数値として取り得ないため。

小数はよくずれるよ

またパソコンでは2進数で表現するので、10進数で綺麗に表現していた小数が二進数になると近似値になってしまうことがある。例えば 0.3 を2進数で表示すると 32bit / 64bit の範囲では厳密に表現できなくなっている。(循環小数なのでこの後も無理なのだが)

2,8,10,16進数 計算・変換(マイナス、小数点対応)

そのため、循環小数同士を足すと近似値同士の計算となるので誤差が出てしまう。

小数計算の誤差 0.1 + 0.2 が 0.30000000000000004 になる理由 | あぱーブログ