Floating point bug?

Dan Bishop danb_83 at yahoo.com
Sat Feb 16 19:21:56 EST 2008


On Feb 14, 8:10 pm, Zentrader <zentrad... at gmail.com> wrote:
> > That's a misconception. The decimal-module has a different base (10
> > instead of 2), and higher precision. But that doesn't change the fact
> > that it will expose the same rounding-errors as floats do - just for
> > different numbers.
>
> >  >>> import decimal as d
> >  >>> d = d.Decimal
> >  >>> d("1") / d("3") * d("3")
> > Decimal("0.9999999999999999999999999999")
>
> Surely you jest.

He's not joking at all.

> Your example is exact to 28 digits.  Your attempted
> trick is to use a number that never ends (1/3=0.3333...).

It does end in base 3, 6, 9, 12, etc.

You have to remember that base-ten wasn't chosen because it has
mathematical advantages over other bases, but merely because people
counted on their fingers.  In light of this fact, why is one-fifth
more deserving of an exact representation than one-third is?



More information about the Python-list mailing list