Python で減算 1 - 0.8 を正しく実行して代入することができません。間違った答え、0.19999999999999996 が出続けます。
私は少し調べました:
sq = {}
sub = {}
for i in range(1000):
sq[str(i/1000.)+'**2']=((i/1000.)**2)
sub['1-'+str(i/1000.)]=(1.0-(i/1000.))
そして、このエラーは、0 から 1 の間の小数第 3 位までの浮動小数点数のややランダムなグループで発生することを発見しました。これらのフロートを 2 乗するときにも同様のエラーが発生しますが、サブセットが異なります。
これについての説明と、Python に正しい算術演算をさせる方法を期待しています。Usinground(x,3)
は私が現在使用している回避策ですが、エレガントではありません。
ありがとう!
これは、私の Python 2.7.3 シェルでのセッションです。
*** Python 2.7.3 (default, Apr 10 2012, 23:24:47) [MSC v.1500 64 bit (AMD64)] on win32. ***
*** Remote Python engine is active ***
>>> 1-0.8
0.19999999999999996
>>> print 1-0.8
0.2
>>> a = 1-0.8
>>> a
0.19999999999999996
>>> print a
0.2
>>> a = 0.2
>>> print a
0.2
>>> a
0.2
>>>
以下は、いくつかのオンライン インタープリターに挿入したコードです。
def doit():
d = {'a':1-0.8}
return d
print doit()
そして出力:
{'a': 0.19999999999999996}