问题描述
我正在尝试为 n 的一个值和下一个值之间的部分和的差异创建一个检测程序,但我收到了 OverflowError 的错误:(34,'数值结果超出范围')。就存储的数字类型而言,我有什么不对的地方吗?这是我的代码:
def compute_sum(a,b,tolerance=1e-5):
"""Compute the sum $\sum^\infty_{n=1} a^n / b^{n-1} until the partial sums are less than *tolerance*.
Returns the computed sum and raises a *ValueError* if the sum appears to be diverging.
"""
import numpy
n = 1;
R = 100;
Rold = 101;
while (R > tolerance):
while (n == 1):
num = a**n
den = b**(n-1)
n += 1
PS = num/den
PSnew = PS
S = PS
else:
while (Rold > R):
num = a**n
den = b**(n-1)
n += 1
PSold = PSnew
PSnew = num/den
Rold = R
R = abs(PSnew - PSold)
S = S + PSnew
computed_sum = S;
return computed_sum
解决方法
如果你设置了一个
另一方面,如果 a > b 则脚本在第一个循环中获得堆栈,这是因为 Rol 立即变得小于 R 但 R 仍然大于容差。
在不同的实例中打印通常有助于检测错误在哪里,但解决这个问题的方法可能是添加一个“and”语句,说最后一个循环继续,除了 R > Rol 和 R