python練習:使用二分法查詢求近似平方根,使用二分法查詢求近似立方根。
阿新 • • 發佈:2019-01-10
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=ans15 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 29high=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)