機械学習やデータ分析分野で定番のプログラミング言語、話題の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)
です。理由がわからない人は、図1を見てください。10進法では桁が1つ下がるごとに、重みは10分の1倍になるのでしたね。
同じように、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進数に変換します(図3)。
小数部は、元の小数部を2倍する作業を小数部が0になるまで繰り返して、得られた数を左から順に並べてください(図4)。ここまでのところで2で割り算したり、2倍したりする理由がわからない人は、図2を見ながらじっくり考えてみてください。
この方法で変換すると、10進数の「10.625」は2進数で「1010.101」になります。もちろん、これも紙の上での値です。コンピューターの内部ではもうひと工夫して、「浮動小数点数」という形式で実数を扱っています。