计算2的平方根

时间:2016-12-14 20:09:07

标签: python bisection

为什么以下代码不会终止?

# 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)

1 个答案:

答案 0 :(得分:3)

你可能会在这条线上失去精确度:

c = (left+right)/2

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

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

c = (left+right)/2.0

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