On Sat, Mar 20, 2010 at 7:56 PM, Guido van Rossum <[email protected]> wrote:
> I propose to reduce all hashes to the hash of a normalized fraction,
> which we can define as a combination of the hashes for the numerator
> and the denominator. Then all we have to do is figure fairly efficient
> ways to convert floats and decimals to normalized fractions (not
> necessarily Fractions). I may be naive but this seems doable: for a
> float, the denominator is always a power of 2 and removing factors of
> 2 from the denominator is easy (just right-shift until the last bit is
> zero). For Decimal, the unnormalized denominator is always a power of
> 10, and the normalization is a bit messier, but doesn't seem
> excessively so. The resulting numerator and denominator may be large
> numbers, but for typical use of Decimal and float they will rarely be
> excessively large, and I'm not too worried about slowing things down
> when they are (everything slows down when you're using really large
> integers anyway).
I *am* worried about slowing things down for large Decimals: if you
can't put Decimal('1e1234567') into a dict or set without waiting for
an hour for the hash computation to complete (because it's busy
computing 10**1234567), I consider that a problem.
But it's solvable! I've just put a patch on the bug tracker:
http://bugs.python.org/issue8188
It demonstrates how hashes can be implemented efficiently and
compatibly for all numeric types, even large Decimals like the above.
It needs a little tidying up, but it works.
Mark
_______________________________________________
Python-Dev mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com