19.3.4 精度と範囲

浮動小数点表現の性質上, 仮数部の桁数は数値の精度(または有効桁数)に関係しますし, 指数部の桁数は表現可能な数値の範囲に影響します. ここでは,次式で与えられる IEEE 754の単精度について,その 精度表現範囲 を考えてみましょう.

数値 = (-1)符号部×(1.仮数部)×2指数部-bias 符号部:1ビット, 仮数部:23ビット, 指数部:8ビット, bias:127

まず仮数は,次のような数になります.

1.00…00(2) = 1
1.00…01(2) = 1+2-23 ≒ 1+1.2×10-7
1.00…10(2) = 1+2-22 ≒ 1+2.4×10-7
:
1.11…11(2) = 2−2-23 ≒ 2−1.2×10-7

このことから単精度の精度は,高々 24ビット, つまり10進数で7桁程度しかないことが分かります. 一方,指数は次のようになります (指数部のビットがすべて0か1, つまり00000000(2)と11111111(2)は, 特別な意味を持っているので除きます).

200000001(2)−127 = 2-126 = 1.2×10-38
:
211111110(2)−127 = 2127 = 1.7×1038

つまり,単精度で表現できる数値の範囲は,その数値の絶対値によって定まり, 最小値が 2-126 ≒ 1.2×10-38, 最大値が (2−2-23)×2127 ≒ 2128 ≒ 3.4×1038 となります. 絶対値が最大値を超えることを オーバーフロー と呼び,最小値を下回ることを アンダーフロー (underflow) と呼びます.

ちなみに倍精度の場合,その精度は 53ビット,10進数の16桁程度になります. また,オーバーフロー限界は 21024 ≒ 1.8×10308, アンダーフロー限界は 2-1022 ≒ 2.2×10-308 になります.