パソコンも計算間違い 0.1+0.1+0.1=0.3じゃない!?『文系プログラマーのためのPythonで学び直す高校数学』から

コンピューターは全て2進法で処理

「コンピューターの計算は正しい」と信じていた人にとっては、ショックな出来事かもしれません。どうして計算を間違えるかというと、コンピューターは2進法でさまざまな値を処理するためです。

2進法(2進位取り記数法)とは、(1)0と1の2つの数字を使う、(2)並べた桁は右から順に10進法でいうところの1、2、4、8……を表す、という決まりに従って数を表す方法で、このルールで表した数を2進数と言います。

ルール(2)の1、2、4、8……をもう少し正確に表すと、1=20、2=21、4=22、8=23……ということになります。ですから、その次の次、つまり右から6桁目は25すなわち32を示します。

では、数字が小さくなる方を見ていきましょう。ここから今回の核心部分です。

23、22、21、20と桁を1つずつ下げて、さらに桁を下げてみます。2の肩に付いている数字を見てください(これを指数といいます)。桁が下がるに従って1つずつ小さくなっていきますね。ですから、20の次は2-1です。これが1の1/2、つまり10進数の0.5になります。さらに桁を進めていくと、2-2、2-3、2-4……となり、それぞれ10進数なら0.25(1/4)、0.125(1/8)、0.0625(1/16)……を表します。

2進数の桁が表す数(『文系プログラマーのためのPythonで学び直す高校数学』p.37より)

0.1は実は「2進数では表しにくい数」

10進数を2進数に直す方法を見てみましょう。たとえば10進数の26を2進数に直してみます。まず、26を2で割ります。なぜ2で割るかというと、2進数に直すからです。ここで、余りに注目します。26÷2の余りは0です。この0が1の位、指数で示せば20の位の値になります。

10進数の26を2進数に直す(同書p.17より)

次に、26÷2の商である13を2で割って、余りを21の位に……という計算を、商が0になるまで繰り返します。この結果、10進数の26は2進数で11010になることがわかりました(ちなみに読み方は「イチイチゼロイチゼロ」です)。

注目記事
次のページ
表計算ソフトやアプリでは弱点は解消済み
今こそ始める学び特集