计算 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

如果leftright都是整数,那么c也是整数。这会导致意外行为,例如 1/2 评估为 0.

您可以通过除以浮点数来强制结果为浮点数:

c = (left+right)/2.0

或者你可以切换到Python 3.X,它会自动使用普通的合理除法。