[Python-ideas] Python Numbers as Human Concept Decimal System
Guido van Rossum
guido at python.org
Sat Mar 8 05:11:26 CET 2014
On Fri, Mar 7, 2014 at 8:00 PM, Chris Angelico <rosuav at gmail.com> wrote:
> On Sat, Mar 8, 2014 at 2:55 PM, Paul Du Bois <paul.dubois at gmail.com>
> wrote:
> > On Fri, Mar 7, 2014 at 6:15 PM, Guido van Rossum <guido at python.org>
> wrote:
> >>
> >> Or, Decimal(repr(some_float)), which DWIM.
>
> > Because I haven't seen anyone else bring this up, using a non-exact
> > conversion breaks the invariant "Decimal(f)==f".
> >
> > There are so many pairs of numeric types that break that invariant that
> it
> > might not be a big deal; but in all other cases the invariant is broken
> > because it is theoretically impossible.
> >
> > from decimal import Decimal
> > f = 2.2
> > print(Decimal(f)==f)
> > print(Decimal(repr(f))==f)
>
> How is Decimal==float implemented? Is it by calling Decimal(rhs) and
> then comparing? If so, changing how Decimal(float) works won't break
> the invariant, as it'll make the same conversion each time.
>
There's a special function to convert the other operand for the purpose of
comparisons, and it currently uses Decimal.from_float(). I am not (yet :-)
proposing to change the behavior of that function -- it is and has always
been the API function that does exact float-to-Decimal conversion.
Decimal(repr(f)) == f returns False today (for the majority of float values
anyway) and under my proposal Decimal(f) == f would also return False. I
don't (yet :-) think that's a deal breaker.
--
--Guido van Rossum (python.org/~guido)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20140307/2fb78557/attachment.html>
More information about the Python-ideas
mailing list