【发布时间】:2019-11-20 05:55:31
【问题描述】:
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 中的幂运算符是
**,而不是^。 -
蒂埃里是对的。
^运算符是按位异或运算:docs.python.org/3.4/library/… -
@ThierryLathuille 如果我使用 ** 运算符,我根本得不到答案
-
您在 for 循环结束时将
c设置为 0。这意味着您的 while 语句正在检查fx(0) > error_bound是否每次。一次为真,终生为真。 -
你应该测试
abs(fx(c)) > (1 * 10 ** (-err))
标签: python python-3.x pycharm