解説
コンピュータは小数も2進数で記憶しますが、10進数の0.1は2進数では割り切れない無限小数になります。1/3=0.333… が10進数で表しきれないのと同じです。
そのため0.1や0.2はわずかに誤差を含んだ近似値として記憶され、足すと0.3ちょうどにはならず 0.30000000000000004 になります。
これはバグではなく、有限のビットで小数を表すことの宿命です。だから小数の比較は == ではなく「差が十分小さいか」で判定するのが正しいやり方です。
書き方
小数(float)は2進数で表すと割り切れず誤差を含む(0.1+0.2 が 0.3 ちょうどにならない)。 ・== は誤差があると False になるので小数の比較に不向き。 ・abs(値) で絶対値、abs(差) < 1e-9 で「ほぼ等しい」を判定(1e-9 は 10^-9)。 ・format(値, ".17f") で小数点以下17桁まで表示し誤差を見る。
書いて動かす
この回の課題
0.1 + 0.2 が 0.3 と == では一致しないことを確かめ、差を表示し、abs(差) < 1e-9 で「ほぼ等しい」と正しく判定しよう。
コードはあなたの端末の中だけで動きます(サーバーには送られません)。進み具合もこのブラウザに保存されます。
もっと本格的に使うなら
Windows版 InsightPy なら、書いたコードを保存して業務の自動化まで進められます。学習センターはずっと無料です。