4

Python の後者のケースで正確に結果が得られないのはなぜ3.3ですか?

>>> 1.0 + 2.3
3.3
>>> 1.1 + 2.2
3.3000000000000003

ここで何が起こっているのか、私には意味がないようです。1.0 + 2.3通過しているが通過していない同じ結果を表現するためのここでの制限は何1.1 + 2.2ですか?

4

1 に答える 1

9

ドキュメントを引用するには:

残念ながら、ほとんどの小数は 2 進数として正確に表すことはできません。その結果、一般に、入力する 10 進浮動小数点数は、マシンに実際に格納されている 2 進浮動小数点数によって近似されるだけになります。

そして、あなたが遭遇したのは、多くの特異性の 1 つです。

>>> 1.1 + 1.1
2.2
>>> 1.1 + 2.3
3.4
>>> 1.1 + 2.2
3.3000000000000003

実際、これはまれなケースで、他の事例を見つけるのに苦労しました。ここに別の奇妙なものがあります:

>>> 0.1 + 0.1 + 0.1 - 0.3
5.551115123125783e-17

Python のdecimalクラスを使用すると、より良い結果が得られます。

于 2013-10-24T18:18:27.600 に答える