为什么我们使用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
答案 0 :(得分:3)
代码的要点是近似任意x
值的平方根,而不仅仅是25。我们通过设置low
和high
值来实现此目的分别比平方根更低和更高,然后进行数学计算以使它们更接近正确的值。
x
介于0和1之间时,x
的平方根大于x
。因此,我们无法将high
设置为x
,因为它需要高于期望的答案。但在这些情况下,我们也知道x
的平方根小于1,因此1将作为初始high
值。 (同样,当x
大于1时,x
的平方根也将大于1,但它将小于x
。)