diff options
author | Tim Peters <tim.peters@gmail.com> | 2006-05-24 21:10:40 (GMT) |
---|---|---|
committer | Tim Peters <tim.peters@gmail.com> | 2006-05-24 21:10:40 (GMT) |
commit | 696cf43b58cf1ddb7a3ab3c5bee6709e3b3653d9 (patch) | |
tree | f68974a6bc0ac69756a54187e1dbf4585f8c9f1a /Misc | |
parent | f4049089c595864138fe2452694ac8a75ab32d69 (diff) | |
download | cpython-696cf43b58cf1ddb7a3ab3c5bee6709e3b3653d9.zip cpython-696cf43b58cf1ddb7a3ab3c5bee6709e3b3653d9.tar.gz cpython-696cf43b58cf1ddb7a3ab3c5bee6709e3b3653d9.tar.bz2 |
Heavily fiddled variant of patch #1442927: PyLong_FromString optimization.
``long(str, base)`` is now up to 6x faster for non-power-of-2 bases. The
largest speedup is for inputs with about 1000 decimal digits. Conversion
from non-power-of-2 bases remains quadratic-time in the number of input
digits (it was and remains linear-time for bases 2, 4, 8, 16 and 32).
Speedups at various lengths for decimal inputs, comparing 2.4.3 with
current trunk. Note that it's actually a bit slower for 1-digit strings:
len speedup
---- -------
1 -4.5%
2 4.6%
3 8.3%
4 12.7%
5 16.9%
6 28.6%
7 35.5%
8 44.3%
9 46.6%
10 55.3%
11 65.7%
12 77.7%
13 73.4%
14 75.3%
15 85.2%
16 103.0%
17 95.1%
18 112.8%
19 117.9%
20 128.3%
30 174.5%
40 209.3%
50 236.3%
60 254.3%
70 262.9%
80 295.8%
90 297.3%
100 324.5%
200 374.6%
300 403.1%
400 391.1%
500 388.7%
600 440.6%
700 468.7%
800 498.0%
900 507.2%
1000 501.2%
2000 450.2%
3000 463.2%
4000 452.5%
5000 440.6%
6000 439.6%
7000 424.8%
8000 418.1%
9000 417.7%
Diffstat (limited to 'Misc')
-rw-r--r-- | Misc/NEWS | 6 |
1 files changed, 6 insertions, 0 deletions
@@ -12,6 +12,12 @@ What's New in Python 2.5 alpha 3? Core and builtins ----------------- +- Patch #1442927: ``long(str, base)`` is now up to 6x faster for non-power- + of-2 bases. The largest speedup is for inputs with about 1000 decimal + digits. Conversion from non-power-of-2 bases remains quadratic-time in + the number of input digits (it was and remains linear-time for bases + 2, 4, 8, 16 and 32). + - Bug #1334662: ``int(string, base)`` could deliver a wrong answer when ``base`` was not 2, 4, 8, 10, 16 or 32, and ``string`` represented an integer close to ``sys.maxint``. This was repaired by patch |