New issue 3031: math.gcd much slower than CPython
https://bitbucket.org/pypy/pypy/issues/3031/mathgcd-much-slower-than-cpython

Luanna:

CPython uses Lehmer's GCD algorithm which is about ten times faster for 
sufficiently large values. A test that shows this:

```
from fractions import Fraction
sum(Fraction(1, n) for n in range(1, 10**4))
```

It takes 70 seconds in PyPy3 but only 3 seconds in CPython.

The good news is that Lehmer’s algorithm is easy to implement. CPython’s 
implementation is in [longobject.c](https://golang.org/src/math/big/int.go). 
There’s also an easier to read implementation [in 
Go](https://golang.org/src/math/big/int.go). For efficiency Lehmer’s algorithm 
needs to operate on machine words, so the implementation needs to be at the 
RPython level which I’m unfamiliar with. I can provide an app-level 
implementation if that is useful although it is only faster for very large 
values.

Please let me know if there’s any way I could help.


_______________________________________________
pypy-issue mailing list
pypy-issue@python.org
https://mail.python.org/mailman/listinfo/pypy-issue

Reply via email to