[Python-Dev] Numerical robustness, IEEE etc.
ncoghlan at gmail.com
Wed Jun 21 13:22:14 CEST 2006
Facundo Batista wrote:
> 2006/6/20, Nick Coghlan <ncoghlan at gmail.com>:
>> The intent was always to replace the internal use of tuples and longs
>> with a
>> more efficient C implementation - that particular step simply wasn't
>> for the original use case that lead Facundo to write and implement PEP
> Right. We never addressed speed. I mean, we made Decimal as fast as we
> could in the limited time we had (Raymond H. helped a lot also here),
> but it was NOT designed for speed.
As I recall, the design flow was pretty much 'make it work to spec' then 'make
it run the telco benchmark and the tests faster while still keeping the
implementation reasonably simple'. Helping Raymond with that tuning process
was actually my first real contribution to CPython, so I got a lot of reading
done while waiting for the benchmark and the decimal arithmetic tests to run
with the Python profiler enabled ;)
Even then, I believe only two particularly significant changes were made to
the implementation - adding the boolean flag so special values could be
detected easily, and copping the conversion costs to & from longs for
coefficient arithmetic, because we made the time back in the long run by
getting to use the C-coded long arithmetic operations.
> BTW, prove me Decimal is not fast enough, ;)
C:\Python24>python -m timeit -s "x = 1.0" "x+x"
10000000 loops, best of 3: 0.137 usec per loop
C:\Python24>python -m timeit -s "from decimal import Decimal as d; x = d(1)" "x+x"
10000 loops, best of 3: 48.3 usec per loop
I don't really know my definition of 'fast enough to be the basic floating
point type', but I'm pretty sure that a couple of orders of magnitude slower
isn't it. I guess I'll find out what my definition is if the C implementation
manages to get there ;)
(Hmm - a couple of spot checks makes it look like the decimal module's slowed
down by a few percent in Python 2.5. It's probably worth trying out the new
profiler on the module to see if there are any simple fixes to be made before
beta 2. . .)
Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia
More information about the Python-Dev