% 0.2 [10進数] = 0.00110011... [2進数] になるのはなぜ?

\documentclass[dvipdfmx]{jsarticle}
\pagestyle{myheadings}
\markright{tmt's math page}
\def\baselinestretch{1.33}

\usepackage{amsmath, amssymb}

\begin{document}

\section*{◆$0.2_{[10進数]} = 0.00110011\dots_{[2進数]}$になるのはなぜ?◆}

「$1001\div11$、余りはいくつ?(計算機での話)」で$2$進数の話題がでました。そのときの脚注に
\begin{quote}
$\dfrac{1}{5}$は$10$進数では有限小数$0.2$ですが、\\
$2$進数では$0.00110011\dots$と無限循環小数になる$\dots$
\end{quote}
という文がありました。気に留めた人はいるでしょうか。同じ数なのに$10$進数では割り切れて$2$進数だと割り切れないのは変ですね。

そもそも私たちが自然に身につけている$10$進法とはどういうものでしょうか。$0$〜$9$までの$10$種類の数字を使うから$10$進法である、というのは簡便な言い方に過ぎません。正確には「$10$進法だからこそ$10$種類の数字しか使えない」のです。

私たちが何気なく使う数には「位取り」がなされています。つまり「$913$」は「$9$, $1$, $3$」ではなく「$9$百$1$十$3$」です。もし位取りがなければ、大きな数が必要になるたびに新たな数字(または記号)が必要になってしまいます。$10$進法の位取りは「$10$を一束にして一つ上の位にまわす」ことになっています。そのため$1$〜$9$までの数字を使い切ったら、次は$10$を一束にして上の位へまわさなくてはならないので、$9$から先の数字を使うわけにいかないのです。先ほど$10$種類の数字しか使えないと言ったのはそういう理由からです\footnote{一般に$n$進法は$(n-1)$種類の数字と空位の(位取りの)$0$を使います。ちなみに$16$進法では空位の$0$の他に$15$種類の数字が必要です。そこで$9$の次の\textbf{数字}に A, B, C, D, E, F を使うのです。}。

では実際の$10$進法の仕組みを述べましょう。

一の位には空位の$0$と$1$〜$9$の数字が使えます。しかし一の位に$9$まで使った次は、それを$10$の束にして十の位にまわさなくてはなりません。十の位ではその束に対して空位の$0$と$1$〜$9$の数字が使えます。そこで十の位に$9$まで使った次は、それを$10$の束にして百の位にまわさなくてはなりません。十の位にはすでに一の位から$10$の束がまわってきているので、百の位には$10\times10$の束がまわります。そしてその束に対して空位の$0$と$1$〜$9$の数字が使えます。そこで百の位に$9$まで使った次は、それを$10$の束にして千の位にまわさなくてはなりません。百の位にはすでに十の位から$10\times10$の束がまわってきているので、千の位には$10\times10\times10$の束がまわります。そして$\dots$。

どうもことばで書くと長々となりますが、$10$進法の仕組みは
\begin{center}
\begin{tabular}{ccccc}
$\dots$ & 千の位 & 百の位 & 十の位 & 一の位 \\
$\dots$ & \fbox{$a_3$}$10^3$ & \fbox{$a_2$}$10^2$ & \fbox{$a_1$}10 & \fbox{$a_0$}
\end{tabular}
\end{center}
ということです。$a_0$や$a_1$の部分に$0$〜$9$のどれか一つの数字が入って何桁かの数ができあがるのです。これらすべてをひっくるめたのが私たちが使う数ですから、$10$進数は一般式で
\[
a_{n-1}\dots a_1a_0 = 10^{n-1}a_{n-1} +\dots +10a_1 +a_0
\]
と書ける数なのです。具体的には$913$なら
\begin{eqnarray*}
913 &=& 900+10+3 \\
&=& 10^2\cdot9 +10\cdot1 +3
\end{eqnarray*}
のことなのです。

この書き方を見ると、桁が一つ上がるごとに束が$10$倍ずつ大きくなっています。それなら逆に、桁が一つ下がるごとに束が$\dfrac{1}{10}$倍ずつ小さくなるわけですから、一の位の下には$\dfrac{1}{10}$、$\dfrac{1}{10^2}$の束があるはずです。これがいわゆる小数点以下の数ということです。一般式では
\[
a_{n-1}\dots a_1a_0~.~b_1b_2\dotsc = 10^{n-1}a_{n-1} +\dots +10a_1 +a_0 +10^{-1}b_1 +10^{-2}b_2 +\dotsb
\]
と書けるのです。具体的には$123.45$は
\[
123.45 = 10^2\cdot1 +10\cdot2 +3 +10^{-1}\cdot4 +10^{-2}\cdot5
\]
です。当たり前といえば当たり前です。実は$2$進法もこれと同じ仕組みなので、結論から言うとこの章の題も当たり前のことにすぎません。続けましょう。

$2$進法は「$2$を一束にして位取りする」表記法です。$10$進法的に式にすると
\[
a_{n-1}\dots a_1 a_0.\ b_1 b_2\dotsc = 2^{n-1}a_{n-1} +\dots +2a_1 +a_0 +2^{-1}b_1 +2^{-2}b_2 +\dotsb
\]
です。これは$2$進数ですから各位の$a_k$や$b_k$に使える数字は$0$か$1$だけであることに注意してください。具体的には$2$進数の$110.011$なら
\begin{eqnarray*}
110.011 &=& 2^2\cdot1 +2\cdot1 +0 +2^{-1}\cdot0 +2^{-2}\cdot1 +2^{-3}\cdot1\\
&=& 4 +2 +0 +0 +0.25 +0.125 \\
&=& 6.375
\end{eqnarray*}
となって、$10$進数の$6.375$のことなのです。

それなら逆に$10$進数の$6.375$を$2$進数に書き直すにはどうすればよいでしょうか。整数部分の$6$については
\begin{center}
\tabcolsep=3pt
\def\arraystretch{.85}
\small
\begin{tabular}{cccc}
$2$\ ) & $6$ & & \\ \cline{2-2}
$2$\ ) & $3$ & $\dots$ & $0$ \\ \cline{2-2}
& $1$ & $\dots$ & $1$
\end{tabular}
\end{center}
のように$2$で割ったときの商と余りを書き出していき、商が$1$になったところで計算を終了します。そして商の$1$を先頭にして順に余りを拾えば$2$進数の$110$となります。この理屈は
\begin{eqnarray*}
6 &=& 2^2\cdot1 +2\cdot1 +0 \\
&=& 2(2\cdot1+1) +0
\end{eqnarray*}
だから$2$で割れば商が$(2\cdot1+1)$で余りは$0$ 。その商$(2\cdot1+1)$は
\[
2\cdot1+1 = 2(1)+1
\]
だから$2$で割れば商が$(1)$で余りは$1$。最後に商の$(1)$だけが浮き出ます。実は次々と$2$で割って余りを出す作業は、$2^k a_k$の$a_k$を次々浮き出させる作業なのです。

そういうことなら小数点以下も次々に$2^{-k}b_k$の$b_k$を浮き出させればよいことになります。そのためには次々と$2$を掛けていき、小数点の左に浮いてきた数を拾えばよいでしょう。実際には
\begin{center}
\begin{tabular}{lclcc}
$0.375$ & ${}\times2 =$ & $\fbox{0}.75$ & $\dots$ & $0$ \\
$0.75$ & ${}\times2 =$ & $\fbox{1}.5$ & $\dots$ & $1$ \\
$0.5$ & ${}\times2 =$ & $\fbox{1}.0$ & $\dots$ & $1$
\end{tabular}
\end{center}
までやれば小数点以下が$0$になり、もう$2$倍する必要はないのでこれで終わりです$2$で割って余りを出すときは一の位から数が浮き出ましたが、この場合は小数第$1$位から数が浮き出るので、拾う順は浮き出た順に「$011$」です。

これでようやく$0.2$を$2$進数で表す準備ができました。いまと同じように$2$倍ずつしていき浮き出た数を拾っていきましょう。

\begin{center}
\begin{tabular}{lclcc}
$0.2$ & ${}\times2 =$ & $\fbox{0}.4$ & \ldots & $0$ \\
$0.4$ & ${}\times2 =$ & $\fbox{0}.8$ & \ldots & $0$ \\
$0.8$ & ${}\times2 =$ & $\fbox{1}.6$ & \ldots & $1$ \\
$0.6$ & ${}\times2 =$ & $\fbox{1}.2$ & \ldots & $1$ \\
\underline{0.2} & ${}\times2 =$ & $\fbox{0}.4$ & $\dots$ & $0$ \\
& \vdots & & & \vdots
\end{tabular}
\end{center}
までやってみるとすぐに気づくはずです。はじめの \underline{0.2} が再び現れました。ということはこの先は同じことの繰り返しになるわけです。つまり$0.2$は$2$倍ずつを繰り返しても決して$1.0$が現れて終了することはないのです。だから$10$進数で有限小数で表せる$0.2$が、$2$進数では無限循環小数になってしまうのです。

\end{document}