コンピュータは【0.1+0.2】ができない!?

みなさん、こんにちは。
埼玉県さいたま市浦和区にあるロボットプログラミング教室「ロボ団北浦和校」です。

今回は「コンピュータは【0.1+0.2】ができない!?」ということで、コンピュータのちょっとしたお話をしたいと思います。

皆さんは、コンピュータは何でもできると思っていませんか?
AIが将棋のプロ棋士に勝ったり囲碁のプロ棋士に勝ったりと、コンピュータは人間よりも頭が良いと思っている人が多いのではないでしょうか。

しかし、実はコンピュータは0.1+0.2の足し算ができません。正確にはできるのですが、0.3という答えを出してくれません。

試しにPythonを使用して【0.1 + 0.2】の計算をしてみましょう。 みなさんのパソコンでも試してみてください。

確かに、0.3ではなく0.30000000000000004になってしまいました。どうしてでしょう?

コンピュータは全てを0か1で考えている

みなさんはコンピュータがどのように動いているか知っていますか?
コンピュータは0と1(電気が流れているか、流れていないか)で全てを考えています。

この0と1のみで表現する方法を二進法と言います。
ちなみに普段使用している数字は基本的に十進法です。

例えば、皆さんがキーボードを使用してAという文字を入力したとします。
コンピュータはキーボードからの入力を読み取り、01000001という数字に変換しています(ASCIIコード)。
また数字も同じで、5を入力するとコンピュータは101と変換します。(正確には少し異なりますが、今回は省略します。)
今回の【0.1+0.2】の場合、数字の変換が重要になるので、詳しくみてみましょう。

10進数から2進数への変換

コンピュータが二進法で動いているというのは知っていただけたかと思います。
では次に、10進数がどのように2進数に変換されているのかを見ていきましょう。

10進数から2進数への変換は、商が0になるまで2で割っていき、最後にあまりを下から書いていきます。
文字で書いても分かりにくいので、下の画像を見てください。

では次に、小数の2進数変換について見ていきましょう。
小数の変換は、小数部分が0になるまで2をかけていきます。また、2をかけた結果、整数部分が1になる場合は0として考えます。

しかし、すべてこの方法で2進数に変換できるとは限りません。
今回のブログの題名にもなっている【0.1+0.2】を考えてみましょう。

このような終わりなく無限に続く小数を無限小数と言います。

0.1と0.2を2進数に変換すると無限小数になってしまうためうまく計算することができなかったのです。

これからコンピュータを使用して様々なプログラムを作る際には、正しく計算ができているのかお気をつけください。
まだまだ人間の計算能力も必要そうですね。

体験会、実施中です!

JAXAや近鉄とコラボした体験会もまだまだ実施しております!
体験会の詳しい内容はこちら

JAXAプログラミング教室体験会(さいたま市ロボ団北浦和校)
ロボ団北浦和校体験会(近鉄)

ロボ団 北浦和校は北浦和駅から徒歩で約5分程度のところにあります。
京浜東北線の各駅にアクセスできる方や、大宮、さいたま新都心、与野、浦和付近にいらっしゃる方は比較的、簡単にお越しいただけるかと思います。
講師一同、楽しみにお待ちしております!

ロボ団北浦和 付近のマップはこちらから

体験会のお申込みはこちらクリック
以下のQRコードからもお申込みできます

体験会申し込みリンクQRコード(ロボ団北浦和校)

お問合せはこちらをクリック