gpt4 book ai didi

python - 识别和修复浮点除以零错误 (Python)

转载 作者:太空宇宙 更新时间:2023-11-03 16:00:03 26 4
gpt4 key购买 nike

我有一段代码,打算在脚本中使用,通过将误差拟合到多项式来使用梯形规则查找数值积分中的误差。这段代码引发了浮点除以零错误,我不明白为什么或如何修复它。

有人可以帮我找到答案吗?

def trap(f,a,b,dx,exact):
N = int(numpy.round(float(b-a)/dx))
w=(b-a)/N
sum = f(a)/2.0 + f(b)/2.0
for i in range(1,N):
sum += f(a+i*w)
area = sum * w
errorf = exact-area
# If the error crosses 0, a polynomial approximation
# to the absolute value will go crazy.
return errorf

此替代方法会引发相同的错误

# alternate way to handle dx not a divisor of b-a
def alt_trap(f,a,b,dx,exact):
N = int(numpy.floor(float(b-a)/dx))
sum = f(a)/2.0 + f(a+N*dx)/2.0
for i in range(1,N):
sum+= f(a+i*dx)
area = sum*dx
# now add one trapezoid between a+Ndx and b
area += 1/2*(b-(a+N*dx))*(f(b)+f(a+N*dx))
errorf = exact-area
return errorf

最佳答案

dx 是唯一可能为 0 并抛出 ZeroDivisionError 的参数。您可以捕获异常并决定做什么或修复输入 - 取决于您的逻辑。

为了提供默认值,只需添加:

dx = dx or 0.0000001 # 0 is false and python is awesome to support this syntax

如果你想 try catch 异常(最好请求原谅而不是许可)

import sys # At the top
...
try:
N = int(numpy.floor(float(b-a)/dx))
except ZeroDivisionError, e:
print a, b, dx
N = sys.maxint

关于python - 识别和修复浮点除以零错误 (Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40411244/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com