homepage

This issue tracker has been migrated to GitHub , and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author pernici
Recipients fredrikj, mark.dickinson, pernici
Date 2008年09月08日.09:39:14
SpamBayes Score 0.0012138741
Marked as misclassified No
Message-id <1220866773.86.0.909854931309.issue3451@psf.upfronthosting.co.za>
In-reply-to
Content
I have translated in C the algorithm for long division by
Burnikel and Ziegler (BZ), using the Python version fast_div.py
and the suggestions by Mark.
Here is a benchmark for divmod(p. q), p = 7**np, q = 5**nq
digits = q_digits = p_digits/2; the time taken by Python division
is normalized to 1
tests on Debian, BZ with Python-2.6b3
 Pentium 1.60GHz Athlon XP 2600+ Athlon 64 3800+
digits BZ fast_div BZ fast_div BZ fast_div
500 1.01 1.27 1.00 1.18 1.00 1.21
700 0.88 1.22 0.76 1.08 0.81 1.14
1000 0.82 1.17 0.72 1.04 0.76 1.10
2000 0.66 0.85 0.55 0.73 0.59 0.78
4000 0.51 0.62 0.43 0.52 0.45 0.56
10000 0.32 0.38 0.31 0.37 0.33 0.39
20000 0.24 0.25 0.23 0.25 0.25 0.27
100000 0.14 0.14 0.11 0.11 0.12 0.12
BZ starts being faster than Python division around 2000 bits, apart
from two cases:
 for q with less than 4000 bits and p much smaller than q**2
 x_divrem is faster than divmod_pos;
 for p very much larger than q**2 x_divrem becomes
 again faster.
I put a bound in long_divrem to fall back to x_divrem in those cases,
based on tests on my laptop Pentium 1.60GHz.
The treatment of exceptions is very rudimentary;
I use a simple macro STUB_EXC to return NULL,
but without releasing memory.
Help for doing this properly is welcome.
Please find attached the diff to the longobject.c file in Python-2.6b3 .
Mario
History
Date User Action Args
2008年09月08日 09:39:34pernicisetrecipients: + pernici, mark.dickinson, fredrikj
2008年09月08日 09:39:33pernicisetmessageid: <1220866773.86.0.909854931309.issue3451@psf.upfronthosting.co.za>
2008年09月08日 09:39:16pernicilinkissue3451 messages
2008年09月08日 09:39:14pernicicreate

AltStyle によって変換されたページ (->オリジナル) /