FE EXAM

ケチ表現(暗黙の1ビット)

浮動小数点数で「いつも1になる先頭ビット」を省略して、その分1ビット多く精度を稼ぐ仕組みです。実際に保存されるビット列と、計算で使う論理上の仮数部を見比べて理解しましょう。

FIGURE
暗黙の1(保存されない)
実際に保存される
例: 10進数 6.5 を IEEE 754 単精度(32ビット)で表す10進数 6.5= 2進数 110.1→ 正規化 → 1.101 × 2² (先頭が必ず「1.」になる)論理上の仮数部(計算で使う形)1暗黙.1010000000(残りの13ビットは0)↓ 先頭の「1.」を省略して保存実際にメモリに保存される仮数部(23ビット)省略.1010000000ケチ表現のメリット暗黙の1ビットを節約 → 同じビット数で 仮数を1ビット多く保存できる → 精度がほぼ2倍IEEE 754 単精度の場合:論理上は24ビットの仮数を、実際には23ビットしか保存しない
解説

📌
ケチ表現とは

正規化後の仮数部の先頭は必ず「1」6.51.101 × 2²0.751.1 × 2⁻¹どの値でも必ず先頭は1なら省略OK

ケチ表現とは、浮動小数点数において「いつも1になる先頭ビット」を省略する仕組みです。「先頭の1を書かないことでケチ(節約)する」というイメージから付けられた名前で、英語では implicit leading bit(暗黙の先頭ビット)と呼ばれます。

浮動小数点数では、値を1.xxx × 2の何乗という形に整える「正規化」を行います。
・6.5 = 1.101 × 2²
・0.75 = 1.1 × 2⁻¹
正規化したあとはどんな値でも、先頭は必ず「1.」から始まります(先頭が0だったら、もう1桁シフトできるからです)。

どうせ毎回「1」なら、わざわざ保存する必要はない──というのがケチ表現の発想です。上のツールの図解で「論理上の仮数部」と「実際に保存される仮数部」を見比べてください。先頭の 1. が消えているだけで、残りはまったく同じです。

📌
先頭の1を省略する理由

ケチ表現なし vs あり(仮数23ビットの枠)なし:1→ 23ビットの枠のうち1ビットを「先頭の1」に消費あり:

ケチ表現の最大のメリットは、同じビット数の枠でより多くの情報を保存できることです。先頭の1を省略した分、空いた1ビット分だけ仮数を長く取れるので、精度(細かさ)がほぼ2倍になります。

IEEE 754 単精度(32ビット)の場合を見てみます。
・実際にメモリに保存される仮数:23ビット
・論理上扱える仮数:24ビット(暗黙の1を含む)
・つまり「メモリ容量はそのままで、精度を1ビット得した」ことになります

身近な例で考えると、郵便番号で「東京都」を毎回書く代わりに「都内なら省略」と決めるようなものです。必ず決まっている情報なら書かなくていい──このアイデアでビット数を節約しているのです。

📌
実ビットと論理仮数の対比

ビット列を浮動小数点として10進数に直すときは、「保存されているビット列の先頭に1を補ってから計算する」ことを忘れないでください。

項目値(IEEE 754 単精度の例)
元の値6.5
正規化形1.101 × 2²
論理上の仮数(計算で使う)1.10100000…(24ビット)
実ビット(メモリに保存)10100000…(23ビット)
違い先頭の「1.」が省略されている

代表的な変換パターン:
保存されたビット列 → 10進数の値:仮数部の先頭に「1.」を補って計算する
10進数 → 保存ビット列:正規化して「1.xxx × 2^n」にし、「1.」を取り除いた残りを仮数として書く
例外:ビット列が全部0の場合(指数も仮数も0)は値も0として扱う。ケチ表現の規則を適用しない特別ルールがあります

上の図解で橙色の点線枠が「保存されない暗黙の1」、青色の枠が「実際に保存されるビット」です。この2つを混同せず、計算するときは必ず先頭に「1」を補うことが、ケチ表現を扱う問題の唯一最大のコツです。

関連コンテンツ

ケチ表現 | Vizigo