You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
geometric_mean can raise OverflowError for large input length #72298
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
assignee='https://github.com/stevendaprano'closed_at=<Date2021-08-20.10:01:31.769>created_at=<Date2016-09-13.02:20:33.234>labels= ['3.7', 'type-bug', 'library']
title='geometric_mean can raise OverflowError for large input length'updated_at=<Date2021-08-20.10:01:31.768>user='https://github.com/stevendaprano'
>>> statistics.geometric_mean([0.7for _ inrange(5000)])
Traceback (most recent call last):
File "/Users/mdickinson/Python/cpython-git/Lib/statistics.py", line 362, in float_nroot
isinfinity = math.isinf(x)
OverflowError: int too large to convert to float
For reference, here's the full traceback. Issue bpo-27975 isn't relevant here - the problem is an out-of-range integer being passed to the math.pow operation.
taniyama:cpython-git mdickinson$ ./python.exe
Python 3.7.0a0 (default, Sep 13 2016, 08:36:28)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import statistics
>>> statistics.geometric_mean(0.7for _ inrange(5000))
Traceback (most recent call last):
File "/Users/mdickinson/Python/cpython-git/Lib/statistics.py", line 343, in float_nroot
isinfinity = math.isinf(x)
OverflowError: int too large to convert to float
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/mdickinson/Python/cpython-git/Lib/statistics.py", line 578, in geometric_mean
s = 2**p * _nth_root(2**q, n)
File "/Users/mdickinson/Python/cpython-git/Lib/statistics.py", line 330, in nth_root
return _nroot_NS.float_nroot(x, n)
File "/Users/mdickinson/Python/cpython-git/Lib/statistics.py", line 345, in float_nroot
return _nroot_NS.bignum_nroot(x, n)
File "/Users/mdickinson/Python/cpython-git/Lib/statistics.py", line 472, in bignum_nroot
b = 2**q * _nroot_NS.nroot(2**r, n)
File "/Users/mdickinson/Python/cpython-git/Lib/statistics.py", line 365, in nroot
r1 = math.pow(x, 1.0/n)
OverflowError: int too large to convert to float
changed the title [-]geometric_mean can raise OverflowError when checking for inf[/-][+]geometric_mean can raise OverflowError for large input length[/+]on Sep 16, 2016
The attached patch provides a fix, and is based partly on Tim Peters' suggestions and code from the bpo-27761 discussion. It needs tests. For convenience, it includes the fix for bpo-28327, since it needs the _frexp_gen function added there.
Activity
stevendaprano commentedon Sep 13, 2016
See bpo-27975 and bpo-27181
mdickinson commentedon Sep 13, 2016
For reference, here's the full traceback. Issue bpo-27975 isn't relevant here - the problem is an out-of-range integer being passed to the math.pow operation.
mdickinson commentedon Sep 16, 2016
See msg276732 in bpo-27761 for a possible solution.
[-]geometric_mean can raise OverflowError when checking for inf[/-][+]geometric_mean can raise OverflowError for large input length[/+]mdickinson commentedon Oct 3, 2016
The attached patch provides a fix, and is based partly on Tim Peters' suggestions and code from the bpo-27761 discussion. It needs tests. For convenience, it includes the fix for bpo-28327, since it needs the
_frexp_genfunction added there.mdickinson commentedon Oct 3, 2016
And here's the actual patch. :-)
mdickinson commentedon Oct 3, 2016
Whoops; that patch was incomplete (it was missing the change to the geometric_mean function itself). Here's an updated patch.
iritkatriel commentedon Aug 20, 2021
I can't reproduce this now (tried on mac and windows):
The current geometric_mean was added in PR12638. Is this issue about a previous version?
mdickinson commentedon Aug 20, 2021
Thanks, @Irit. Yes, this is about a different version of geometric_mean that didn't end up making it into any release.