Mark Dickinson <[email protected]> added the comment:
Here's code to illustrate the idea. It doesn't yet handle zeros, infinities or
nans; that support would need to be added.
import math
def fprod(numbers):
# Product of numbers, avoiding intermediate underflow and overflow.
# Does not handle zeros, infinities or nans
# Running product is acc_m * 2**acc_e
acc_m, acc_e = float.fromhex("1p1000"), -1000
count = 0
for number in numbers:
m, e = math.frexp(number)
acc_m *= m
acc_e += e
if count == 1000:
if acc_m < 1.0:
acc_m = math.ldexp(acc_m, 1000)
acc_e -= 1000
count = 0
return math.ldexp(acc_m, acc_e)
----------
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue41458>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com