[Python-Dev] Decimal data type issues
Batista, Facundo
FBatista at uniFON.com.ar
Wed Apr 14 17:51:08 EDT 2004
[Tim Peters]
#- I expect everyone's initial reaction will be to say "no
#- limit", but think
#- two or three times about that. Eliminating any restriction
#- on exponent
#- magnitude is the same as saying overflow can never happen.
#- But overflow is
#- usually a valuable safety net in real life, telling you that
#- your algorithm
#- has gone insane. OTOH, there's nothing with physical
#- significance that
#- requires an exponent anywhere near as large as 999999999,
#- and REXX has used
#- that exponent limit for years without problems.
But it's still an artificial restriction. We have no-limit longs, should
have limited Decimal?
And also implies more code and complexity in the module. But this is a side
effect and not the primary concern in the decision.
#- (c) also specifies ways to spell special values, like NaNs
#- and infinities.
#- Does Decimal(string)? I don't believe the PEP covered that.
Yes, it does. I missed mention it and an example in the PEP. Already fixed.
#- In any case, from_string() should be subsumed by
#- Decimal(string), perhaps
#- with via an optional "use_context" flag argument.
You mean something like Decimal(string, use_context=True)? And when creating
from long, for example? Remember that the spec says that the context affect
the operations, not creations (with the exception of from_string).
#- It's quite arguable that str() should be exactly the standard's
#- to_sci_string() (and for those who haven't read the spec, do
#- before you
#- complain about that -- no, you don't always get an exponent under
#- to_sci_string()).
I'm lost here. Are you saying that str() should have the same behaviour that
to_sci_string()?
#- > Hash behaviour
#- > --------------
#-
#- Decimals that happen to be exact integers must return the
#- same hash codes as
#- the hash codes of the ints or longs they're equal to. All
#- bets are off wrt
#- hash codes for non-integral Decimals (e.g.,
#- hash(Decimal('1.5')) may or may
#- not be the same as hash(1.5)); promising more than that is simply
#- impractical.
#-
#- BTW, hash(Decimal('1.0')) must be the same as
#- hash(Decimal('1.00')) must be
#- the same as hash(Decimal('0.001e3')) despite that they have different
#- internal representations.
I agree completely with this behaviour.
. Facundo
More information about the Python-Dev
mailing list