计算 2 的平方根
Calculating square root of 2
为什么下面的代码没有终止?
# 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)
您可能会失去这条线的精度:
c = (left+right)/2
如果left
和right
都是整数,那么c
也是整数。这会导致意外行为,例如 1/2
评估为 0
.
您可以通过除以浮点数来强制结果为浮点数:
c = (left+right)/2.0
或者你可以切换到Python 3.X,它会自动使用普通的合理除法。
为什么下面的代码没有终止?
# 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)
您可能会失去这条线的精度:
c = (left+right)/2
如果left
和right
都是整数,那么c
也是整数。这会导致意外行为,例如 1/2
评估为 0
.
您可以通过除以浮点数来强制结果为浮点数:
c = (left+right)/2.0
或者你可以切换到Python 3.X,它会自动使用普通的合理除法。