1

Python 2.7 で float を 100 で除算すると、次のような「丸め動作」が得られます。

>>> 3.7e-03/100
3.7000000000000005e-05

私は次のことを期待します:

>>> 3.7e-03/100
3.7e-05

ご了承ください:

>>> 3.7e-03/100 == 3.7e-05
False
>>> 3.7000000000000005e-05 == 3.7e-05
False

おそらくほとんどのアプリケーションで実質的な違いはありませんが、私はこの動作がやや当惑していることに気付きました。

これはなぜ起こり、どうすれば回避できますか?

Python を使用しています: '2.7.5 |Anaconda 1.7.0 (32 ビット)| (デフォルト、2013 年 7 月 1 日 12:41:55) [MSC v.1500 32 ビット (Intel)]'

4

1 に答える 1

2

これは、浮動小数点数のよく知られた欠陥です。

バイナリ浮動小数点は、分母が 2 の累乗の分数と考えることができます。のような単純な数値でさえ、0.12 進浮動小数点として正確に表すことはできません。

Python で任意の分母を使用して正確な除算が必要な場合は、Decimal(鉛筆と紙の小数をシミュレートする) またはFraction(鉛筆と紙の分数をシミュレートする) を使用します。

于 2013-10-31T10:20:53.323 に答える