python练习:使用二分法查找求*似*方根,使用二分法查找求*似立方根。
python练习:使用二分法查找求*似*方根,使用二分法查找求*似立方根。
重难点:原理为一个数的*方根一定在,0到这个数之间,那么就对这之间的数,进行二分遍历。精确度的使用。通过最高值和最低值确定二分的范围。考虑判断数字的正负情况。while abs(ans**2-x)>=epsilon:这一个判断最关键。求立方根的时候,判断数为负数的时候,情况会有很大不同。
1 print("————————————————————————————") 2 #使用二分法查找求*似*方根 3 x=0.9#需要查找的数 4 epsilon=0.01#*似值精度 5 numGuesses=0#二分次数 6 low=0.0 7 high=max(1.0,x)#如果查找的数最大值大于一,那么最大数为本身,如果小于一,那么最大数就为1 8 ans=(high+low)/2.0#二分之一值 9 if x>0: 10 while abs(ans**2-x)>=epsilon:#原理:一个数的*方根一定在,0到这个数之间,那么就对这之间的数,进行二分遍历 11 print('low',low,'high=',high,'ans=',ans) 12 numGuesses+=1 13 if ans**2<x: 14 low=ans 15 else: 16 high=ans 17 ans=(high+low)/2.0 18 print('二分次数:',numGuesses) 19 print(x,'的*方根是',ans) 20 else: 21 print('所判断的数不是正数') 22 print("————————————————————————————") 23 #使用二分法查找求*似立方根 24 x=-3375#需要查找的数 25 epsilon=0.01#*似值精度 26 numGuesses=0#二分次数 27 if x>0: 28 low=0.0 29 high=max(1.0,x)#如果查找的数最大值大于一,那么最大数为本身,如果小于一,那么最大数就为1 30 ans=(high+low)/2.0#二分之一值 31 while abs(ans**3-x)>=epsilon:#原理:一个数的立方根一定在,0到这个数之间,那么就对这之间的数,进行二分遍历 32 print('low',low,'high=',high,'ans=',ans) 33 numGuesses+=1 34 if ans**3<x: 35 low=ans 36 else: 37 high=ans 38 ans=(high+low)/2.0 39 print('二分次数:',numGuesses) 40 print(x,'的立方根是',ans) 41 else: 42 low=0.0 43 high=min(-1.0,x)#如果查找的数最大值大于一,那么最大数为本身,如果小于一,那么最大数就为1 44 ans=(high+low)/2.0#二分之一值 45 while abs(ans**3-x)>=epsilon:#原理:一个数的立方根一定在,0到这个数之间,那么就对这之间的数,进行二分遍历 46 print('low',low,'high=',high,'ans=',ans) 47 numGuesses+=1 48 if ans**3>x: 49 low=ans 50 else: 51 high=ans 52 ans=(high+low)/2.0 53 print('二分次数:',numGuesses) 54 print(x,'的立方根是',ans)