こんにちは、阿久梨絵です!
「1010 × 0.3って、どうなるの?」
この問いに、モヤモヤした人へ。
ITの世界では、数字が“正確”であるほど、私たちの感覚から遠ざかることがあります。
今回は、 2進数 「1010」を使って、10進数「0.3倍」・ 2進数 「0.010011倍」がなぜ難しく感じるのかを一緒にほどいていきましょう。
ステップ①:「1010」ってどんな数?
・1010 は 4ビットの2進数。
・それを「0.010011倍」するということは、小数との掛け算になる。
ステップ②:「0.010011」ってどんな数?
・0.010011 は、2進数の小数。
・小数点以下のビットは、それぞれ以下の重みを持つ
0.010011
↓
2⁻¹ → 0
2⁻² → 1
2⁻³ → 0
2⁻⁴ → 0
2⁻⁵ → 1
2⁻⁶ → 1
・このように、割り切れない小数は2進数では無限に続くことがある。
・今回は「6ビットで切り捨てて近似」して扱う。
ステップ③:2進数だけで掛け算する
各ビットに対して「1010」を右にシフトして加算
1010 × 0.010011
0000001010 ← 1010 × 2⁻⁶(右に5シフト)
+ 0000010100 ← 1010 × 2⁻⁵(右に4シフト)
+ 0000101000 ← 1010 × 2⁻²(右に1シフト)
合計 = 10.11111(2進数)≒ 2.96875(10進数)
・2⁻³, 2⁻⁴, 2⁻¹ のビットは 0 なので無視。
・加算結果は 10.11111(2進数) → 丸めて → 11(2進数)
安心ポイント
小数点以下の掛け算も、2進数の加算とシフトだけで処理できる。
「ゼロばかりに見える…」と感じても、それは重みが小さいから。
でも、ちゃんと積み重なって意味のある結果が出ているんです。
まとめ
「0.010011倍したいのに、 2進数 だとなんだかモヤモヤする…」
それはあなたのせいじゃなくて、2進数の世界が割り切れない小数に不向きだから。
でも、近似して加算するだけで、ちゃんと計算できる。
2進数 だけでも、安心して掛け算できるんです。
阿久梨絵でした!
