質問
今日は何もすることがないので IDLE で計算してみたら0.1 + 0.2
、 と同じでびっくりした0.30000000000000004
、ナニ?小数点以下 17 桁があと 1 桁しかないのですが4
、これもまた深く考えさせられ、長年の数学の勉強は無駄だったのではないでしょうか?
まず、プログラムの実行結果を見てみましょう。
もちろん、これはバグではないかと疑問に思う生徒もいるかもしれません。それでは、いくつかのテストを行ってみましょう。
このプログラムの一般的な意味は、i < 1
その時点でi
値が加算され0.1
、各i
値が出力されるということです。結果を見ると、Python には非常に多くのバグがあると言うべきではなく、未知の秘密があるようです。
混乱している
Python の整数とは異なり、Python の浮動小数点数には誤差があります。これは、浮動小数点数の格納に IEEE754 標準を使用しているためです。そのため、基本的に、Python の浮動小数点数に特定の精度誤差が生じます。それでは、固定小数点数と浮動小数点数の原理は何でしょうか? ここでは説明しませんが、主に0.1+0.2 == 0.3
Python で次のような結果が得られるため、それをどのように作成するかという問題を解決する方法について話します。
>>> 0.1 + 0.2 == 0.3
False
この問題の解決も非常に簡単で、decimal
モジュールを使用する必要があります。Python でモジュールをインポートするために使用されるステートメントは ですimport
。具体的な手順は以下の通りです。
decimal
モジュールをインポートした後、オブジェクト a と b を作成します。括弧内の数字は文字列であることを示すために一重引用符で囲まれていることに注意してください。その後、a + b = 0.3
結果が表示されますが、この時点では、実際には異なるオブジェクトであるため、直接比較a + b
と等しくないことに注意する必要があります。そのため、0.3
オブジェクトを作成する必要があります。正しい。c
a + b == c