4

Pythonで遊んでいるときに、これに出くわしました:

a = 1/(2.2 - 2)

print a       #prints out 5.0
print int(a)  #prints out 4

問題は 2 進数表現に関係していると思われます (2 進数で 1/5 を表すことは、10 進数で 1/3 を表すことと同じです)。誰かがこれに光を当てることができますか?

4

1 に答える 1

4

あなたの疑いはまったく正しい。根本的な原因は、2.2 を次のように正確に表すことができないことfloatです。

In [38]: '%.20f' % 2.2
Out[38]: '2.20000000000000017764'

残りはこれから次のようになります。

In [45]: '%.20f' % (2.2 - 2)
Out[45]: '0.20000000000000017764'

In [46]: '%.20f' % (1 / (2.2 - 2))
Out[46]: '4.99999999999999555911'
于 2013-03-02T21:59:05.987 に答える