Please subscribe to the official Codeforces channel in Telegram via the link https://t.me/codeforces_official. ×

ibrahim129's blog

By ibrahim129, history, 3 years ago, In English

I was doing some float operations using python. But when I tried to divide 9999999999999999 by 2 (9999999999999999/2) I got 5000000000000000.0 which is wrong. I already know the issue 8.6-8.4 != 0.2 (issue with binary representation) but I couldn't figure out what is the issue. Can anyone explain this?

  • Vote: I like it
  • +10
  • Vote: I do not like it

»
3 years ago, # |
  Vote: I like it +1 Vote: I do not like it

Python float doesnt have enough precision to distinguish a difference at around 1e-16, so in Python, 99...9 (as you wrote) is stored equal to 10...00 (with as many 0s as there were 9s above).

Interactive shell:

Input: float(10000000000000000)==float(9999999999999999)
Output: True
»
3 years ago, # |
  Vote: I like it +3 Vote: I do not like it

You can also use the decimal module in python for accurate floating point arithmetic :

from decimal import Decimal

print(Decimal(9999999999999999)/Decimal(2))