FE EXAM

小数部の基数変換(掛け算法)

10進小数を 2進・8進・16進の小数に変換する手順。整数部分の「割り算法」と対をなす「掛け算法」を使い、基数を変えても同じパターンで解けます。

INTERACTIVE VISUALIZATION
取り出す桁
入力 (10進小数)
0.625
変換先
2進数
結果 (2進)
0.101(2)
10進小数
変換先の基数
プリセット (入力)
小数部に変換先の基数を掛け、整数部を取り出して桁とする。残った小数部に同じ操作を繰り返します。取り出した桁を上から順に並べると答え。
掛け算法のステップ
#10.625000× 2 =1.250000→ 整数部
1
#20.250000× 2 =0.500000→ 整数部
0
#30.500000× 2 =1.000000→ 整数部
1
✓ 終了
結果
0.625(10)=0.101(2)
解説

📌
小数部の基数変換とは

小数部の基数変換は、10進小数(0.625 など)を別の基数の小数(2進数なら 0.101 など)に直す操作です。整数部分の「割り算法」とは違って、「掛け算法」を使います。

例:
0.625(10) = 0.101(2)
0.5(10) = 0.4(8)
0.25(10) = 0.4(16)

ただし10進では割り切れる小数でも、他の基数では循環小数になることがあります。例えば0.1(10)を2進数にすると 0.0001100110011... という循環小数になります。これがコンピュータでの「浮動小数点誤差」の根本原因です。

🛠
2倍して整数部を取り出す手順

手順は4ステップを繰り返すだけ。
・① 小数部に変換先の基数を掛ける
・② 結果の整数部を取り出す(それが結果の桁)
・③ 残った小数部を「次の入力」として、また①②
・④ 小数部が 0 になるか、必要な精度に達するまで繰り返す

0.625 を2進数に変換する例:
・0.625 × 2 = 1.25 → 整数部 1、残り 0.25
・0.25 × 2 = 0.5 → 整数部 0、残り 0.5
・0.5 × 2 = 1.0 → 整数部 1、残り 0(終了)
・結果を上から並べる: 0.101(2)

整数部の割り算法との対比:
・整数部: 「2で割って余りを集めて逆順に並べる」
・小数部: 「2を掛けて整数部を集めて上から順に並べる」
方向が「下からの逆順」ではなく「上から順」になる点に注意。

💡
誤差・循環小数が発生する理由

10進では綺麗な値でも、2進ではキレイに割り切れず循環小数になる小数があります。これがコンピュータの「浮動小数点誤差」の正体です。

有名な例: 0.1(10) を2進数に変換
・0.1 × 2 = 0.2 → 0、残り 0.2
・0.2 × 2 = 0.4 → 0、残り 0.4
・0.4 × 2 = 0.8 → 0、残り 0.8
・0.8 × 2 = 1.6 → 1、残り 0.6
・0.6 × 2 = 1.2 → 1、残り 0.2 ← 2 行目と同じ!
・以後 0.2 → 0.4 → 0.8 → 0.6 → 0.2 ... を無限に繰り返す

結果: 0.0001100110011... (0011 が永遠に繰り返される循環小数)

この循環小数を浮動小数点(IEEE 754)が有限ビット数で打ち切るため、0.1 + 0.2 ≠ 0.3 となるのがプログラミングの「あるある」です。これはつまり「浮動小数点では正確に表せない小数がある」ということです。

上のツールで「0.1」を選び、2進数を試してみてください。10ステップ目でも 0 に収束せず、循環小数になっていることが見えます。逆に「0.625」「0.5」「0.25」のような「2のべき乗の和で表せる小数」は、ぴったり割り切れます。

関連コンテンツ

小数部の基数変換 | Vizigo