けいブログ

端くれ描画プログラマによるNote

note: 浮動小数点数

浮動小数点数の最大・最小値や有効桁数(精度)についての備忘録です。

32bit float

bit表現

一般的な標準フォーマットであるIEEE-754によると、 符号部が1bit。指数部(E)が8bit。仮数部(M)が23bit。

特殊ケース(E=0, E=255)を除いた値の決め方は以下の通り。

 2^{(E-127)} \cdot (1 + \frac{M}{2^{23}})

表現できる最大・最小の数

最大は  E=254, M={2^{23}}-1 を考えるので、およそ  3.4028 \cdot 10^{38}

最小は  E=1, M=1 を考えるので、およそ  1.1754 \cdot 10^{-38}

E-127=0 のときに表現できる最小の数

M=1を考えるので、 2^{-23} \approx 1.1920 \cdot 10^{-7}

10進数で小数点以下7桁くらいが表現できる最小の数であることがわかる。

ここで有効桁数について調べると、2進数で24桁(仮数部23桁とプラスする1)あるので、10進数では  log_{10}{2^{24}} \approx 7.2247 桁。

一般化

指数部のbit数をA、仮数部の桁数をBとしたときに:

最大  2^{(2^{(A-1)}-1)} \cdot (1 + \frac{2^{B}-1}{2^{B}})
最小  2^{-(2^{(A-1)}-2)} \cdot (1 + \frac{1}{2^{B}})
有効桁数  log_{10}{2^{(B+1)}}

32bit float 以外の浮動小数点数

A B 最大 最小 有効桁数
double(64bit) 11 52  1.7976 \cdot 10^{308}  2.2250 \cdot 10^{−308} 15.9545
half(16bit) 5 10 65504 0.00006109 3.3113
符号なし11bit 5 6 65024 0.00006198 2.1072
符号なし10bit 5 5 64512 0.00006294 1.8061