使用max()函数进行二分搜索

时间:2014-09-06 06:44:28

标签: python bisection

为什么我们使用max函数。我们不能马上评估高到x。这也将达到我们的目的。那么,算法如何通过这个max()函数改进?

x=25
epsilon=0.01
numGuesses= 0
low =0.0
high = max(1.0,x)
ans = (high+low)/ 2.0
while abs(ans**2 -x)>= epsilon:
    print 'low =', low, 'high =', high, 'ans =', ans
    numGuesses+= 1
    if ans**2 <= x:
        low= ans
    else:
        high= ans
    ans = (high+low)/2.0
print 'numGuesses =', numGuesses
print ans, 'is close to square root of', x

1 个答案:

答案 0 :(得分:3)

代码的要点是近似任意x值的平方根,而不仅仅是25。我们通过设置lowhigh值来实现此目的分别比平方根更低和更高,然后进行数学计算以使它们更接近正确的值。

x介于0和1之间时,x的平方根大于x。因此,我们无法将high设置为x,因为它需要高于期望的答案。但在这些情况下,我们也知道x的平方根小于1,因此1将作为初始high值。 (同样,当x大于1时,x的平方根也将大于1,但它将小于x。)