Pernici Mario <[EMAIL PROTECTED]> added the comment: 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 ---------- nosy: +pernici Added file: http://bugs.python.org/file11423/diff _______________________________________ Python tracker <[EMAIL PROTECTED]> <http://bugs.python.org/issue3451> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com