<p>当我添加使用<code>abs()</code>和<code>**</code>的建议,然后捕获异常时,我得到如下代码:</p>
<pre><code>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 abs(fx(c)) > ( 10 ** -err):
try:
c = b - ((b - a)/(fx(b) - fx(a))) * fx(b)
except ZeroDivisionError:
break
print(a, b, c, sep=', ')
a = b
b = c
c = 0
print()
print("The root is approximately = ", b)
</code></pre>
<p>当我运行它时,我得到:</p>
<pre><code>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
2.0, 6.5, 2.1658986175115205
6.5, 2.1658986175115205, 2.302797651275858
( steps omitted )
2.7473464241055843, 2.7473465403033757, 2.747346540307211
2.7473465403033757, 2.747346540307211, 2.747346540307211
The root is approximately = 2.747346540307211
</code></pre>
<p>这是正确的答案吗?你知道吗</p>
<p>您可以从倒数第二行的输出中看到,最后两个数字是相同的(b和c),下一次循环a和b将有这些值,因此<code>fx(b) - fx(a)</code>将导致<code>0.0</code>和零分错误。你知道吗</p>