ZeroDivisionError:浮点除以零?

问题描述 投票:0回答:3
def fx(x):
    v = float(x*x*x - 5*x - 7)
    return v


err = int(input("Enter zeroes in approxiamtion in solution: "))
b = float(input("Enter upper limit for root: "))
a = float(input("Enter lower limit for root: "))
c = 0.0
while fx(c) > (1 * 10 ** -err):
    c = b - ((b - a)/(fx(b) - fx(a))) * fx(b)
    print(a, b, c, sep=', ')
    a = b
    b = c
    # c = 0
    print()
print("The root is approximately = ", b)

即使循环给出了正确的值,为什么在执行此代码时为什么会出现零除错误?

编辑:我将^运算符更改为**并删除了c = 0,但现在答案甚至与实际答案并不接近。 ^运算符奇怪地给了我正确答案。

带有**运算符的输出:

Enter zeroes in approxiamtion in solution: 3
Enter upper limit for root: 2
Enter lower limit for root: 1
The root is approximately =  2.0

带有^运算符的输出:

Enter zeroes in approxiamtion in solution: 3
Enter upper limit for root: 2
Enter lower limit for root: 1
1.0, 2.0, 6.5
Traceback (most recent call last):

2.0, 6.5, 2.1658986175115205
  File "C:/Users/anves/PycharmProjects/nt/nt.py", line 46, in <module>

    c = b - (((b - a)/(fx(b) - fx(a))) * fx(b))
6.5, 2.1658986175115205, 2.302797651275858

ZeroDivisionError: float division by zero
2.1658986175115205, 2.302797651275858, 2.934211734811194

2.302797651275858, 2.934211734811194, 2.705017710718186

2.934211734811194, 2.705017710718186, 2.7438299655247143

2.705017710718186, 2.7438299655247143, 2.7474171932954787

2.7438299655247143, 2.7474171932954787, 2.7473464241055843

2.7474171932954787, 2.7473464241055843, 2.7473465403033757

2.7473464241055843, 2.7473465403033757, 2.747346540307211

2.7473465403033757, 2.747346540307211, 2.747346540307211

最后一个值是未打印的正确值?

python python-3.x pycharm
3个回答
0
投票

我刚刚运行了您的代码,发现fx(b)fx(a)是相同的值。因此,当您计算fx(b)减去fx(a)时,您会得到0希望这会有所帮助。

Terminal -----------------------------------
Enter zeroes in approxiamtion in solution: 5
Enter upper limit for root: 5
Enter lower limit for root: 5
93.0
93.0
Traceback (most recent call last):
  File "d:/PythonScripts/first_python_project/curso_python.py", line 13, in <module>
    c = b - ((b - a)/(fx(b) - fx(a))) * fx(b)
ZeroDivisionError: float division by zero

添加更多:当您达到较低的值时,仅fx(b)fx(a)会变得非常相似。像这样的东西:

Enter zeroes in approxiamtion in solution: 3
Enter upper limit for root: 5
Enter lower limit for root: 3
93.0
5.0
3.0, 5.0, 2.8863636363636362

2.614751596543952
93.0
5.0, 2.8863636363636362, 2.825218326106125

1.424401534793665
2.614751596543952
2.8863636363636362, 2.825218326106125, 2.7520503761266304

0.08317571970829363
1.424401534793665
2.825218326106125, 2.7520503761266304, 2.747512887487003

0.002935214303143141
0.08317571970829363
2.7520503761266304, 2.747512887487003, 2.747346905212986

6.43830337132556e-06
0.002935214303143141
2.747512887487003, 2.747346905212986, 2.747346540335565

5.002736003234531e-10
6.43830337132556e-06
2.747346905212986, 2.747346540335565, 2.747346540307211

1.7763568394002505e-15
5.002736003234531e-10
2.747346540335565, 2.747346540307211, 2.747346540307211

1.7763568394002505e-15
1.7763568394002505e-15
Traceback (most recent call last):
  File "d:/PythonScripts/first_python_project/curso_python.py", line 13, in <module>
    c = b - ((b - a)/(fx(b) - fx(a))) * fx(b)
ZeroDivisionError: float division by zero

0
投票

我看到两个问题。一种是表达式((1 * 10 ^ -err))。 Python中的运算符^表示按位XOR,而10 ^ -err是负整数。因此,在找到根之后,循环不会结束。它应该是abs(10 ** -err)

第二个问题是c = 0作为根的初始值。它应该在(a,b)间隔之内,而不是零。


-1
投票

您收到此错误,因为在代码中的某些时候

让我们说fx(a)=1.0000000000000001fy(b)=1.0

而不是fx(a)-fy(b)=0.0000000000000001您得到0.0。

因此出现零除法错误

© www.soinside.com 2019 - 2024. All rights reserved.