
両方を比べると、「2進→10進」の変換では、小数点から遠い外側から、「10進→2進」では小数点の足元の内側から計算していくことになりますね。

小数についてもさっそく同じように分析していきましょう。元の計算は以下のものでした。

整数のときと同様に、共通する基数を括っていきます。整数のときは、大きな桁からでしたが、小数では、より深いところの、小さな桁の方が累乗の次数が高いので、そちらから順々に入れ子にしていきます。

整数のときとは、入れ子の向きが逆なので、入れ子の深いところから計算するb)の矢印が「2進から10進に戻す」、外側からのa)の方の向きが「10進から2進を作る」フローになります。a)の向きでは、もともと各桁値に1/2を掛けて2進小数が構成されていますので、それを1/2で割り戻す(=2倍する)ことで、小数値が1を超えて1を引けるようであれば1を外し、なければ0を置いてそのまま次に進む、というのが式から読みとれるところです。
整数で検証した、ウォーターフォール状の変換図も作ってみましょう。赤字の部分を入れ替えることで他の例でも計算できます。また「1/2」を交換すれば別のn進法に切り替えできることも整数のときと同じです。

上の小数の変換手順では、<2進→10進>で「1/2を掛ける」とあるのは「2で割る」、<10進→2進>で「1/2で割る」は「2を掛ける」のといっしょです。従って<2→10>で整数では「2を掛ける」ときに少数は「2で割る」、<10→2>で整数が「2で割る」ときに小数では「2を掛ける」、というひっくり返しの関係になります。また、整数の<10進→2進>の計算では、(整数の)半端、余りが出たら、それを下の位からセットしていきますが、小数の側では、逆に2を掛けることで小数点の水面から上に整数があふれて浮き出てきたら、それをすくって上の位からはめこんでいく、という流れで、小数の計算ですから、小数点以下を常に1以下に保つための整数の「余り」、という考え方になります。
整数の際に作成した「2進数生成マシン」も、小数版を作ってみました。ストレートにMOD関数で余りを抽出して摘み取っていけばいいというものではないので、ひとひねり加えてあるところが特徴です。整数版といっしょに並べておきますので、関数式の違いを比べてみてください(小数を手軽に2進変換するツールは、オフライン/オンラインともあまりないようなので、ツールとしてもけっこう便利かもしれません)。

