10進数での小数の表現を考える.例えば,次の小数は
![$\displaystyle (0.1235)_{10} =(1\times 10^{-1}+2\times 10^{-2}+3\times 10^{-3}+5\times 10^{-4})_{10}$](img118.png) |
(16) |
となっており,整数の場合と同じである.小数点を境に,右側の指数部が-1, -2, -3と1ず
つ減少する.これは,先に示した整数の場合と全く同じで,簡単である.当然,
は理解していなくてはならない.
2進数での少数の表記も,10進数の場合と同じである.だから,2進数少数を10進数少数に
変換するのは簡単である.たとえば,
となる.当然
は理解していなくてはならない.
つぎは,先ほどと逆を考える.たとえば,先ほどの例の
![$ (0.65625)_{10}$](img137.png)
を2進数で表現
する.そのためには,
と書き直せばよい.ただし,
![$ a_n$](img139.png)
は0または1である.そして,この
![$ a_n$](img140.png)
を並べると,
![$\displaystyle (0.65625)_{10}=(a_1a_2a_3a_4\cdots)_2$](img141.png) |
(21) |
と2進数で表現できる.ここで,問題は
![$ a_n$](img142.png)
を求めることである.そこで,式
(
20)の両辺を2倍する.すると,
![$\displaystyle (1.3125)_{10} =(a_1\times 2^{0}+a_2\times 2^{-1}+a_3\times 2^{-2}+\cdots)_{10}$](img143.png) |
(22) |
となる.この式の両辺の整数部と小数部は等しいので,
|
![$\displaystyle (1)_{10}=(a_1)_{10}$](img144.png) |
|
![$\displaystyle (0.3125)_{10} =(a_1\times 2^{0}+a_2\times 2^{-1}+a_3\times 2^{-2}+\cdots)_{10}$](img145.png) |
|
(23) |
となる.これで,
![$ a_1=1$](img146.png)
が求まった.同じように,残りの小数部分を2倍すると,
![$\displaystyle (0.625)_{10} =(a_2\times 2^{0}+a_3\times 2^{-1}+a_4\times 2^{-2}+\cdots)_{10}$](img147.png) |
(24) |
となる.これも,両辺の整数部と小数部が等しいので,
|
![$\displaystyle (0)_{10}=(a_2)_{10}$](img148.png) |
|
![$\displaystyle (0.625)_10=(a_3\times 2^{-1}+a_4\times 2^{-2}+a_5\times 2^{-3}+\cdots)_{10}$](img149.png) |
|
(25) |
が得られる.これで,
![$ a_2=0$](img150.png)
が求まった.同様に以下の通り,残りの小数部分の計算を進める
と,全ての
![$ a_n$](img151.png)
が求まる.
最後に,小数部がゼロとなったので計算は,完了となる.以上をまとめると
となる.要するに,小数部を2倍して,その整数部を書いていけばよい.
普通は,図7のようにして計算を進める.2倍して,整数部を書き出して,
小数部を再度2倍する.これを繰り返すと,10進数小数を2進数小数に変換することができ
る.10進数の0.1は循環小数ではないが,2進数にすると,
![$\displaystyle (0.1)_{10}=(0.00011001100110011\cdots)_2$](img159.png) |
(30) |
と循環小数になる.通常は,途中まで(必要な精度まで)で計算を打ち切る.
図 7:
小数の基数変換(10進数
2進数)
|
ホームページ:
Yamamoto's laboratory著者:
山本昌志
Yamamoto Masashi
平成19年2月8日