機械学習やデータ分析分野で定番のプログラミング言語、話題のPythonを使って数学を学び直しましょう。今回は「実数の表し方」を解説します。

 「3.14」や「9.8」のように、小数点を含んだ値のことを「実数」と言います。もちろん、コンピュータの世界では「.」を使えません。その代わりに「浮動小数点数」という形式で実数を扱います。

桁には重みがある

 10進数の桁の重みは10nで表されることと、nの値が1つ増えるごとに重みは10倍になることは前述しました。これらを踏まえて考えてみてください。「10.625」という値は、

  10が1個
  1が0個
  0.1が6個
  0.01が2個
  0.001が5個

これらを全部足した値です。数式で表すとどうなると思いますか?

 10や1と同じように0.1、0.01も桁の重みですから、それぞれを10nで表現すると、

  10.625
  =(101×1)+(100×0)+(10-1×6)+(10-2×2)+(10-3×5)

です。理由がわからない人は、次の図を見てください。10進法では桁が1つ下がるごとに、重みは10分の1倍になるのでしたね。

10進数の桁の重み
[画像のクリックで拡大表示]

 同じように、2進数の「0.1001」を考えてみましょう。もちろん、コンピュータの世界では「.」が使えないので「0.1001」は紙の上での話ですが、2進法では桁が1つ下がるごとに重みは2分の1倍になるので、

  (20×0)+(2-1×1)+(2-2×0)+(2-3×0)+(2-4×1)
  =(1×0)+(0.5×1)+(0.25×0)+(0.125×0)+(0.0625×1)
  =0.5625

のように計算すると、2進数の「0.1001」は10進数の「0.5625」です。

2進数の桁の重み
[画像のクリックで拡大表示]

実数を基数変換する

 10進数の整数を2進数に変換する方法、覚えていますか? 元の値を2で割る作業を商が0になるまで繰り返して、求めた余りを右から順に並べるのでしたね。「10.625」のような実数も、整数部はこれと同じ方法で2進数に変換します。

整数部を2進数に変換
[画像のクリックで拡大表示]

 小数部は、元の小数部を2倍する作業を小数部が0になるまで繰り返して、得られた数を左から順に並べてください。ここまでのところで2で割り算したり、2倍したりする理由がわからない人は、前項「桁には重みがある」の図を見ながらじっくり考えてみてください。

小数部を2進数に変換
[画像のクリックで拡大表示]

 この方法で変換すると、10進数の「10.625」は2進数で「1010.101」になります。もちろん、これも紙の上での値です。コンピュータの内部ではもうひと工夫して、「浮動小数点数」という形式で実数を扱っています。