FE EXAM

正規化(小数点を動かして 1.xxx × 2^E の形にする)

浮動小数点で値を保存する前に必ず行う処理が「正規化」です。2進数の小数点を移動させて、必ず先頭が「1.」になる形に整えるプロセスを、ステップごとに確認します。

INTERACTIVE VISUALIZATION
仮数
指数
入力値(10進)
6.5
2進数表記
110.1(2)
正規化後
1.101 × 2^2
10 進数を入力
プリセット
正規化プロセス
STEP 1 — 10進数を2進数に変換
6.5 110.1(2)
STEP 2 — 小数点を「最初の 1 のすぐ右」へ移動
110.1(2)1.101(2)
小数点を 2 動かしました
STEP 3 — 動かした桁数を 2 の指数で記録
指数 E = +2
小数点を左に動かした分だけ「2 の正のべき乗」で補正する
結果(正規化形)
6.5 = 1.101(2) × 22
仮数の "1." は暗黙なので、実際にメモリに保存されるのは 101 の部分(仮数部)と、129(指数部・バイアス済み)。
解説

📌
正規化とは

「1.xxx × 2^E」の形に整える操作110.1₍₂₎1.101 × 2²同じ値だが、表現方法が変わる

正規化とは、浮動小数点数を 「1.xxx × 2E の形に書き直す操作のことです。値そのものは変わりませんが、表現の形が決まった「標準形」に揃います。

たとえば 10 進数の 6.5 は 2 進数では 110.1 ですが、これを正規化すると 1.101 × 2² になります。小数点を 2 桁左に動かしたぶん、指数として 2² を掛けて辻褄を合わせます。

身近な例で考えると、科学的記数法そのものです。15001.5 × 10³ と書くのと同じ発想です。浮動小数点はこれを 10 ではなく 2 のべき乗で行います。

📌
1.xxx形にする理由

ある数を 2 進数で表す方法は無限にあります。たとえば 6.5 は次のように全部「同じ値」ですが書き方は違います。
110.1 × 2⁰
1.101 × 2² ← 正規化形
0.1101 × 2³
11010 × 2⁻¹

これだと「同じ値なのに表現が複数」あって、コンピュータが扱いにくい。「必ず 1.xxx の形」に決めれば、表現が一意になる──というのが正規化の目的の1つです。

もう1つの大きな利点は、先頭が必ず 1 になるので、その 1 を保存しなくて済むこと(ケチ表現/暗黙の 1)。これで仮数部のビット数を 1 つ節約できて、その分だけ精度が上がります。

📌
精度を最大化する仕組み

仮数部は 1.0 〜 ほぼ 2.0 の範囲に固定されているため、ビット数全部を「小数点以下の細かさ」に使えます。これが精度の良さに直結します。

もし正規化していないと、たとえば仮数が 0.0011 のような先頭に 0 が並ぶ形でも許容することになります。すると先頭の 0 を保存するためのビットが無駄になり、本当に意味のある桁の数が減って精度が落ちてしまいます。

正規化のポイント:
・正規化を行う目的 → 表現の一意性 + ケチ表現で精度を稼ぐ
・正規化した値の仮数の範囲 → 1.0 ≤ M < 2.0(暗黙の 1 を含めた場合)
・正規化できない特殊な値 → 0 と、特殊な ±∞・NaN

上のツールでプリセット「0.1」を試してみてください。0.0001100110011...(循環小数)になります。これを正規化すると 1.100110011... × 2⁻⁴。指数 -4 で 1/16 倍になり、仮数の有効桁数を最大限活用できる形になります。

関連コンテンツ