使用二分法(Bisection Method)求平方根。
1 def sqrtBI(x, epsilon): 2 assert x>0, 'X must be non-nagtive, not ' + str(x) 3 assert epsilon > 0, 'epsilon must be postive, not ' + str(epsilon) 4 5 low = 0 6 high = x 7 guess = (low + high)/2.0 8 counter = 1 9 while (abs(guess ** 2 - x) > epsilon) and (counter <= 100):10 if guess ** 2 < x:11 low = guess12 else :13 high = guess14 guess = (low + high)/2.015 counter += 116 return guess
验证一下。
上面的方法,如果 X<1 ,就会有问题。因为 X (X<1)的平方根不在 [0, x] 的范围内。例如,0.25,它的平方根——0.5 不在 [0, 0.25] 的区间内。
那如何求0.25的平方根呢?
只要略微改动上面的代码即可。注意6行和7行的代码。
1 def sqrtBI(x, epsilon): 2 assert x>0, 'X must be non-nagtive, not ' + str(x) 3 assert epsilon > 0, 'epsilon must be postive, not ' + str(epsilon) 4 5 low = 0 6 high = max(x, 1.0) 7 ## high = x 8 guess = (low + high)/2.0 9 counter = 110 while (abs(guess ** 2 - x) > epsilon) and (counter <= 100):11 if guess ** 2 < x:12 low = guess13 else :14 high = guess15 guess = (low + high)/2.016 counter += 117 return guess
再检验一下:
如果不知道怎样去调用自定义的方法(模块),可参考