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 を表すことと同じです)。誰かがこれに光を当てることができますか?
あなたの疑いはまったく正しい。根本的な原因は、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'