On Dec 23, 5:21 pm, Isaac Gouy <igo...@yahoo.com> wrote: > On Dec 23, 11:51 am, bearophileh...@lycos.com wrote: > > > They have translated the Python benchmarks of the Shootout site from > > Py2 to Py3 using 2to3: > > >http://shootout.alioth.debian.org/u32/benchmark.php?test=all〈=pyt... > > So please re-write those programs to remove problems created by > automatic translation and better take advantage of Python 3 > functionality... > > http://shootout.alioth.debian.org/u32/faq.php#play > > > It shows some "performance bugs" of Python3 itself (especially > > regarding the binary-trees benchmark, that was unexpected by me), and > > two points where 2to3 may be improved, for example after the > > translation this gives error: > > table=string.maketrans('ACBDGHK\nMNSRUTWVYacbdghkmnsrutwvy', > > 'TGVHCDM > > \nKNSYAAWBRTGVHCDMKNSYAAWBR')): > > > Gives: > > TypeError: maketrans arguments must be bytes objects > > > Bye, > > bearophile > > BTW I am not sure how to submit this or if this is actually valid to do, but I have a faster version for the pidigits program that uses basically the same algorithm but removes function calls and unused terms of the formula.
<pre> import time def pi_digits(n, width): out = [] wrt = out.append aq = 1 ar = 0 at = 1 k = 0 f = 1 g = 2 i = 0 while i < n: y = (aq*3+ar)//at while y != ((aq*4+ar)//at): k += 1 f += 2 g += 4 ar = aq*g+ar*f aq = aq*k at = at*f y = (aq*3+ar)//at aq = 10*aq ar = 10*ar-10*y*at i += 1 wrt(str(y)) if not i%width: wrt('\t:%d\n'%i) wrt(' '*(width-i%width)) wrt('\t:%d\n'%i) return ''.join(out) def main(): begin = time.time() n = 1000 width = 70 print pi_digits(n,width) print 'Total Time:', time.time()-begin main() </pre> -- http://mail.python.org/mailman/listinfo/python-list