浮動小数点数で「精度(どこまで細かく表現できるか)」を担当するのが仮数部です。6 ビットの仮数を1つずつクリックして、合計が 1.xxx の形になる仕組みを体験してください。
仮数部とは、浮動小数点数で「先頭の桁の小数」を表すパーツです。値の式 1.M × 2E のうちの 1.M の "M" 部分を担います。
ポイントは 「常に 1.」から始まること。仮数部のビット列は小数点以下の数字なので、たとえば 101000 なら 1.101000(二進)= 1.625(十進)を意味します。
各ビットの重みは、小数点直後から順に 1/2, 1/4, 1/8, 1/16, 1/32, ...と半分ずつ減っていきます。これは 2 進数の小数表現そのもので、ON のビットの重みを全部足したものが仮数の小数部です。
仮数部のビット数が多いほど、表せる値の刻みが細かくなり、精度が上がります。
・6 ビット仮数(このページの例): 1.0 〜 1.984375 を 64 段階で表現
・IEEE 754 単精度の 23 ビット仮数: 1.0 〜 1.99999988 を約 800 万段階で表現
・IEEE 754 倍精度の 52 ビット仮数: さらに細かく、10 進数で約 15〜17 桁の精度
指数部は「値の桁数(スケール)」を担当する一方で、仮数部は「同じスケールの中での精度」を担当します。たとえば 1.0 と 1.5 と 1.625 はどれも同じ「2⁰ のスケール」ですが、仮数部のビット列の違いだけで区別されます。
身近な例で考えると、定規の目盛りです。1cm おきの目盛りより 1mm おきの目盛りの方が、同じ範囲内でも細かい長さを測れます。仮数部のビット数が多いほど、この「目盛りの細かさ」が増します。
浮動小数点数で値を保存する前に、必ず「1.xxx × 2E」の形に整える操作 = 正規化を行います。これにより、仮数の整数部は必ず 1になります。
どんな値でも仮数の先頭は 1 になるなら、わざわざその 1 をメモリに保存する必要はありません。これを「ケチ表現(暗黙の 1)」と呼びます。
・実際にメモリに保存されるのは 小数点以下の部分だけ(このページの 6 ビット)
・計算時には、先頭に「1.」を補ってから使う
・結果として、1 ビット多く精度を稼げる
上のツールでは、左端の橙色の点線の「1」が暗黙の先頭ビットです。クリックできません(常に 1 と決まっているため)。その右の 6 ビットだけが、実際に保存される「仮数部のビット列」です。
押さえておきたいポイント:
・IEEE 754 単精度の仮数部は 23 ビット(暗黙の 1 を含めると 24 ビット相当)
・仮数部のビット列 100... が表す仮数値は 1.100... の二進 = 1.5(暗黙の 1 を補う)
・精度を上げるには、単精度を倍精度に切り替える(仮数 23 → 52 ビット)