You are absolutely right in your suspicions. The main reason is that 2.2 cannot be represented exactly as a float :
In [38]: '%.20f' % 2.2 Out[38]: '2.20000000000000017764'
The rest follows from this:
In [45]: '%.20f' % (2.2 - 2) Out[45]: '0.20000000000000017764' In [46]: '%.20f' % (1 / (2.2 - 2)) Out[46]: '4.99999999999999555911'
source share