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)

猜你喜欢

转载自www.cnblogs.com/ming-4/p/10250718.html