コンピュータでは二進数を使って数値を扱うため、0.1のような十進小数を正確に表現できず、計算結果にわずかな誤差が発生することがあります。しかし、この問題は二進数だけの特殊な欠点ではありません。実は十進数にも、有限の桁では正確に表せない数字が存在します。
この記事では、なぜ進数によって表せる数字と表せない数字が変わるのか、十進数で表現できない数の例、そして別の進数に変換すると綺麗に表せる場合があるのかについて、数学的な仕組みから分かりやすく解説します。
数を表す進数によって「綺麗に表せる数字」は変わる
数字の表現方法は、何を基準に数を区切るかによって変化します。私たちが普段使っている十進数は、10を基準にして桁を増やしていく仕組みです。
例えば、十進数では0.5は1桁で表現できます。これは10分の5という意味であり、分母の10が5で割り切れるためです。
一方で、0.333…のような数字は十進数では有限の桁で表せません。0.333333…と無限に3が続く循環小数になります。このように、ある進数で有限の桁として表現できるかどうかは、その進数の性質によって決まります。
十進数でも表せない代表的な数字
十進数で有限小数として表せない数字の代表例は、1/3です。分数で書けば単純な数ですが、十進数では0.333333…となり、永遠に桁が続きます。
同じように、1/7も十進数では0.142857142857…という循環小数になります。つまり、十進数だからすべての数字を正確に有限の桁で表せるわけではありません。
ただし、人間は普段十進数を使っているため、十進数で表しやすい数字を自然に選んで生活しています。そのため、十進数の限界は二進数ほど意識される機会が少ないのです。
なぜ二進数では0.1が表せないのか
二進数では、桁の値は1、2、4、8、16のように2の累乗で増えていきます。小数部分では1/2、1/4、1/8、1/16などの組み合わせで数字を表します。
例えば、十進数の0.5は二進数では0.1となります。これは1/2を意味するため、非常に簡単に表現できます。
しかし、十進数の0.1は分数で表すと1/10です。10という数字には2だけでなく5という素因数が含まれています。そのため、2の累乗だけを使う二進数では有限の桁で表現できず、0.0001100110011…のような循環小数になります。
表せない数字は別の進数なら表せるのか
ある進数で表せない数字でも、別の進数に変えることで有限の桁として表現できる場合があります。
例えば、十進数では0.1は簡単に表せますが、二進数では表せません。しかし、十六進数では0.1は0.199999…のように別の形になるため、必ずしもすべてが綺麗になるわけではありません。
逆に、二進数で表せない0.1は、十進数や五進数などでは有限小数として表現できます。つまり、数字そのものが「表せない」のではなく、「ある進数のルールでは有限の桁で表せない」という意味です。
有限小数になる条件は分母を見ると分かる
分数をある進数で有限小数として表せるかどうかは、分母の素因数によって判断できます。
十進数の場合、10は2×5なので、分母が2と5だけの因数で構成されている分数は有限小数になります。例えば、1/2、1/4、1/5、1/20などは十進数で綺麗に表現できます。
一方で、分母に3や7などが含まれる場合は、十進数では循環小数になります。二進数の場合は、分母が2だけで構成されているものだけが有限小数になります。
コンピュータの誤差は「計算ミス」ではなく表現方法の問題
コンピュータで0.1を足した結果が少しずれることがありますが、これはコンピュータが計算を間違えているわけではありません。
二進数では0.1を正確に保存できないため、最も近い値に丸めて記録しています。その近似値を使って計算を続けることで、わずかな誤差が現れることがあります。
例えば、金融システムなどでは小数誤差が問題になるため、十進数専用の計算方式を利用したり、金額を整数の最小単位で管理したりする工夫が行われています。
まとめ|表せない数字はどの進数にも存在する
二進数で0.1が表せないように、十進数でも1/3など有限の桁では表せない数字があります。これは二進数特有の欠点ではなく、進数という仕組みそのものが持つ性質です。
どの数字が綺麗に表現できるかは、その進数の基数と数字の分母の関係によって決まります。そのため、ある進数で表せない数字でも、別の進数では簡単に表せる場合があります。
コンピュータの小数誤差を理解するには、「数字には進数によって表現しやすさの違いがある」という点を理解することが重要です。


コメント