Google 検索アプリに表示される Discover を見ていたら、この「0.1+0.2≠0.3」の記事が流れてきました。
「説明できないエンジニアがいるらしい」ということで(普通に僕は知らなかったのですが)、よく見てみたらコンピューターは2進法で計算するから、10進数での簡単な数(0.1や0.2など)も、2進数では循環小数になって誤差が生じるっていうことでした。
そんな中Googleが高性能AIの「Gemini」を発表していたので、久しぶりに Bard さんに聞いてみたら「https://0.30000000000000004.com/」というサイトがあることを知りました。
Bard さんに「プログラミングで0.1+0.2=0.3にならない理由を教えてください」と聞いてみた
Bard さんに聞いてみたら、参考にしたサイトのサムネイル付きで「0.3ではなく、0.29999999999999998のような値になります。」という返答をくれました。
ただ、サムネイルで表示されたサイトは以下なのですが、
「0.29999999999999998」ではなく、「0.1 + 0.2 = 0.3 but computer says 0.30000000000000004」って書いてあるのですが、なんでBard さんは「0.3以下」になっちゃったんですかね。。
そこはいいとして、参考サイトの下の方に「References(参考文献)」があったのですが、その最初に「https://0.30000000000000004.com」というURLを発見しました。
https://0.30000000000000004.com というサイト
気になっちゃったんで、普通にクリックしてしまったのですが(ちょっと怪しさがありますよね)、ちゃんとまともなサイトでした!
というか、【0.1 + 0.2 ≠(!=) 0.3】(Floating Point Math(浮動小数点演算))についての専門サイトでした。
ページをスクロールしていくと、プログラム言語によって「0.30000000000000004」になる結果がいっぱい表示されていました。
プログラム言語がこんなにいっぱいあるのも知らなかったのですが、結構な言語で【0.1 + 0.2 ≠ 0.3】になるのも初めて知りました!
プログラミングでは、0.1+0.2=0.3にならない事が多い! のまとめ
ふと流れてきた記事から、久しぶりに「え!そうなの?!」「おぉ〜〜〜!!!」という経験をしました。
コンピューターは2進法で計算するから、循環小数によって誤差が生じて【0.1 + 0.2 ≠ 0.3】になるということでした。
また「2進法」もかなり久しぶりに見て、「2進法」を指で数えるのも思い出しました(笑)
コメント