Tim Peters added the comment:
Thanks, Mark! I had worked out the `floor_nroot` algorithm many years ago, but
missed the connection to the AM-GM inequality. As a result, instead of being
easy, proving correctness was a pain that stretched over pages. Delighted to
see how obvious it _can_ be!
Just FYI, this was my "cheap" suggestion:
from fractions import Fraction
def rootn(x, n):
g = Fraction(x**(1.0/n))
g = ((n-1)*g + Fraction(x)/g**(n-1)) / n
return float(g)
For fun, I ran that and your `nroot` over several million random cases with `x`
of the form
ldexp(random(), randrange(-500, 501))
and `n` in randrange(2, 501).
They always delivered the same result, which differed from `x**(1/n)` about a
quarter of the time. On average `nroot` took about 3.7 times longer.
But reducing the `n` range to randrange(1, 100), over half the time the
(common) result differed from `x**(1/n)`, and `nroot` was significantly faster.
Moral of the story: none I can see ;-)
----------
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue27761>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com