Steven D'Aprano <steve+pyt...@pearwood.info> added the comment:
Hi Leonard, Any number which has only fixed precision will experience similar issues. It might affect different calculations. In Python, float, complex and Decimal have fixed precision, so they can experience this issue. But for simple calculations, Decimal may be better for you, as it uses base-10 floats, not base-2, so many numbers which are rounded off in binary floats are not rounded in Decimal: py> from decimal import Decimal py> 0.1111 + 0.2222 # binary floats 0.33330000000000004 py> Decimal('0.1111') + Decimal('0.2222') # decimal floats Decimal('0.3333') But with Decimal, you have other numbers which are rounded off and so are not exact: py> one_third = 1/Decimal(3) py> 3*one_third # should be exactly 1 Decimal('0.9999999999999999999999999999') py> (1/Decimal(6)) * 3 Decimal('0.5000000000000000000000000001') ints are always exact, but you can only do whole numbers with ints. Fractions are also exact: py> from fractions import Fraction py> Fraction(1111, 10000) + Fraction(2222, 10000) Fraction(3333, 10000) Using Fraction is a good way to see what number a binary float really is: py> Fraction(0.1111) Fraction(4002799348806897, 36028797018963968) ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue41920> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com