二分查找,以1/2的循环切割有效值域,在有效值域内部搜索需求对象,
注意: 所搜索值必须在有效值域内,以下为例
立方公式: x^3 = y
立方根:
1)x > 1时,x <= y,值域在 (x,y)内
2)0< x <1时,x>y值域在(0,1)内
故值域上界需手动修改,使用 max(abs(y),1) 确保有效值域
3)当y<0时,x<0时,只需将以上符号反转为 负(- ) 即可
"""
ans:立方根 y:搜索值 hight:值域上界 lower:值域下界 epsilion:精确度 num:步长
二分查找,搜索立方根,使用while循环实现查找域(ans,abs(y))
平方根位于 (-1,1)区间时,查找值域不在搜索上界 (ans,y)内,
故需要手动提高上界
"""
ans = 0.0
y = -8000990 #求取
num = 0 #记录步长
hight = max(abs(y),1) #比对y与1,确定上界
lower = ans
epsilion = 0.001 #精确度
while abs(ans**3 - abs(y)) > epsilion and ans <= max(abs(y),1):
if ans**3 > abs(y):
hight = ans
else:
lower = ans
print(ans)
ans = (hight + lower)/2
num += 1
if abs(ans**3 - abs(y)) > epsilion:
print('It not variables!')
if y < 0:
ans = -ans
print(num)
print(ans)