On Thu, 26 Jun 2014 13:13:45 +1000, Chris Angelico wrote: > On Thu, Jun 26, 2014 at 12:56 PM, Steven D'Aprano <st...@pearwood.info> > wrote: >> That's a myth. decimal.Decimal *is* a floating point value, and is >> subject to *exactly* the same surprises as binary floats, except for >> one: which Decimal, you can guarantee that any decimal string you enter >> will appear exactly the same (up to the limit of the current >> precision). > > The important difference is that the issues with decimal floats come > where humans are comfortable seeing them. If you divide 1 by 3, you get > 0.333333333 and can understand that adding three of those together won't > quite make 1.0, because you can see that you shortened it. If you divide > 11 by 10, it's not obvious that that repeats.
I'm not sure if you're agreeing with me or disagreeing with me. "Repeats" is a property of a number *in a specific base*, not of the number itself. So 1/3 does not repeat in base 3, where it would be written as the terminating trinary number 0.1. Likewise, 11/10 repeats in base 2, but not in base 10. What I am I saying is that regardless of whether you use binary floats or base-10 Decimals, not all rational numbers x/y can be represented exactly. I certainly wasn't saying that the same rationals are inexact in both bases, just that the surprise "x/y is not exact" occurs whether you have binary or decimal floating point numbers. Likewise for all other floating point issues, except the surprise "this base-2 float is not exactly equal to the base-10 number I typed". Because Decimal is base-10, what you type is what you get. -- Steven -- https://mail.python.org/mailman/listinfo/python-list