FE EXAM

指数部(値の桁数=スケールを決めるパーツ)

浮動小数点数では「指数部」が値の大きさのスケール(何桁の数か)を担当します。指数を変えるたびに 2 のべき乗倍されて、小数点の位置が動きます。

INTERACTIVE VISUALIZATION
指数部
仮数
実値
実指数
+3
2 のべき乗
23 = 8
仮数(固定 1.5)
1.1(2) = 1.5
実値 = 1.5 × 23
12.00
指数部の値 (実指数)+3
-1010
プリセット
指数部の値が変わると、仮数 1.1₍₂₎ (= 1.5) を 2 のべき乗倍するので、小数点の位置が右(指数 +)か左(指数 −)に移動します。実値の桁数が大きく変わるのが「指数部の働き」です。
仮数 1.1₍₂₎ × 23 による小数点の移動指数部(8ビット・バイアス127)10000010= 130(= 実指数 +3 + バイアス127)仮数の小数点を右へ3桁シフト元: 1.1₍₂₎1.100₍₂₎10 進数での実値1.5 × 23 = 12.00指数を +1 すると値は 2倍−1 すると 1/2 倍になる
解説

📌
指数部とは

値の「スケール」を 2 のべき乗で表現2⁻²=0.252⁻¹=0.52⁰=12¹=22²=42³=8指数 +1 ごとに 2 倍になる(飛び飛びだが範囲は広い)

指数部とは、浮動小数点数の中で「値のスケール(桁の大きさ)」を担当するパーツです。具体的には、2 の何乗で割増し/割引きするかを表します。

浮動小数点数の値の式は 1.M × 2E(仮数 × 指数部のべき乗)で表されます。仮数 1.M は 1.0〜2.0 の範囲に固定されているので、値が大きいか小さいかは指数部 E が決めるのです。

身近な例で考えると、「科学的表記」そのものです。1.5 × 103 = 1500 のように、頭の数字(仮数)は同じでも、10 のべき乗(指数)を変えれば「1500 円」にも「0.0015 円」にもできます。浮動小数点はこれを 10 ではなく 2 のべき乗で表現しているだけです。

📌
バイアス表現との関係

指数部は負の値も持てる必要があります(とても小さい数を表すため)。でも 2進数のままだと負を表すのが面倒。そこで IEEE 754 では「バイアス表現」という工夫を使います。

仕組み(IEEE 754 単精度の場合):
・実指数に常に +127(バイアス)を加えてから、それを 2 進数 8 ビットで保存
・例: 実指数 0 → 保存値 127 → 2進数 01111111
・例: 実指数 +3 → 保存値 130 → 2進数 10000010
・例: 実指数 −3 → 保存値 124 → 2進数 01111100

これで保存される値は常に 0 以上の符号なし整数になり、ビット列の大小比較がそのまま指数の大小比較になるという利点があります。詳しくは「バイアス表現」のページで。

上のツールの上部に、8ビットの指数部のバイアス済みビット列が表示されています。スライダーで実指数を変えると、ビット列が変化するのが見えます。例えば実指数 0 のときは 01111111、+3 のときは 10000010 となります。

📌
表現範囲が広い理由

浮動小数点数が非常に大きな数も小さな数も扱えるのは、指数部のおかげです。指数を 1 増やすだけで値が 2 倍、1 減らすだけで 1/2 倍になり、わずか 8 ビットの指数部でも 2±127(約 10±38もの範囲を表現できます。

固定小数点との比較:
固定小数点: 「整数 16 ビット + 小数 16 ビット」のように刻みが固定。表せる範囲が狭い(おおよそ ±65536 まで)が、誤差は一定
浮動小数点: 仮数 + 指数で刻みが可変。表せる範囲が非常に広い(約 ±1038)が、値が大きい領域では刻みも大きくなり、精度は粗くなる

上のツールで指数を +10 にしてみてください。1.5 × 2¹⁰ = 1536 になります。逆に −10 にすると約 0.001 になります。同じ 1.5 という仮数でも、指数部だけで値の桁数がこれだけ変わる──これが浮動小数点が「広範囲」と言われる理由です。

関連コンテンツ

指数部 | Vizigo