为什么以下代码不会终止?
# approximating sqrt(2)
def approx (error,left, right):
c = (left+right)/2
f = c**2 - 2
if abs(f)<error :
return c
if f < 0:
left = c
else:
right = c
return approx(error,left,right)
print approx(0.1,0,2)
答案 0 :(得分:3)
你可能会在这条线上失去精确度:
c = (left+right)/2
如果left
和right
都是整数,那么c
也将是整数。这会导致意外行为,例如1/2
评估为0
。
您可以通过除以浮点来强制结果为浮点数:
c = (left+right)/2.0
或者你可以切换到Python 3.X,它会自动使用普通的合理分区。