New submission from Jurjen N.E. Bos <j...@users.sourceforge.net>:

When looking at the code of pow() with integer exponent, I noticed there is a 
hard boundary between the binary and "fiveary" (actually 32-ary) computations. 
Also, the fiveary wasn't really optimal.

So I wrote a proof of concept version of long_pow that dynamically uses 
addition chains!
It does save over 10 % of multiplications for exponents from 20 to a few 
hundred bits, and then the saving go down to a few percent for very long 
numbers. It does not take much more memory nor time for any argument 
combination I checked.
I tested it on 3.8rc1, but I am planning to port it to 3.10. This is a bit 
difficult, since *lots* of code around it changed, and I only have Windows 7. 
However, I'll keep you posted.
See https://github.com/jneb/cpython/tree/38_fast_pow

----------
components: Interpreter Core
files: longobject.c
messages: 384949
nosy: jneb
priority: normal
severity: normal
status: open
title: Addition chains for pow saves 10 % time!
type: performance
versions: Python 3.10
Added file: https://bugs.python.org/file49737/longobject.c

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue42911>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to