在python中計算乙個數的算術平方根其實很簡單,可以使用pow()函式。如計算100的算術平方根:
但是呢,為了學習使用二分法這種思想,我們特意將簡單問題稍微複雜化一下~
所謂的二分是指取中間值的意思。以計算100的算術平方根10為例,首先計算機會根據輸入資訊判斷猜測區間,這裡可以設定最小值為0,最大值為100。
第一次猜測:guess = (0+100)/2=50。50明顯大於目標(10),因此猜大了,此時,計算機會自動修改猜測的最大值為50,最小值仍然為0。
第二次猜測:guess = (0+50)/2=25。還是猜大了,繼續修改猜測的最大值為25。
第三次猜測:guess = (0+25)/2=12.5。還是猜大了。
第四次猜測:guess = (0+12.5)/2=6.25。哎?猜小了!因此,修改猜測的最小值為6.25,最大值為12.5。
第五次猜測:guess = (6.25+12.5)/2=9.375。猜小了,繼續修改猜測的最小值為9.375,最大值為12.5。
第六次猜測:guess = (9.375+12.5)/2=10.9375,已經相當接近目標(10)了……如此進行下去,直到guess的值為10.
注釋:low表示猜測區間最小值,high表示猜測區間最大值,如果要計算x的平方根,一般會將猜測的最大值設為x。因為直接比較guess與根號x的大小不太方便,對應的等價比較為:比較guess的平方與x的大小。由上述描述可以看出,如果猜小了,則會修改猜測區間的最小值(low)為guess,繼續採用二分法猜。如果猜大了,則會修改猜測區間的最大值(high)為guess,繼續採用二分法猜。
python**實現:
注釋:while語句中,在比較guess的平方與x的大小關係時需要特別注意,guess是計算出來的,是浮點數,浮點數之間比較大小不能直接用==或!=,具體原因是因為存在不確定尾數,需要引入round()函式。參考我的另一篇文章:
cara:python中關於0.1+0.2≠0.3的問題zhuanlan.zhihu.com
執行效果如下:
二分法做平方根
注意這裡的浮點數 不然的話程式會報錯 coding utf 8 二分法計算20的平方根 import math a 0.0 多次二分後會變成二分法,所以要設定成浮點數,python裡就是直接賦值成浮點數 b c float raw input enter a number n 100 while t...
起乙個數的平方根 初學平方根
初中數學中,平方根是學生們首先接觸的根式,後面還有立方根,四次方根,五次方根,以及大學要用的n次方根。平方根和立方根是基礎,初中生要能正確理解方根的意義,能夠熟練說出乙個數的方根。今天,我主要想和大家先來認識一下平方根。什麼是平方根呢?這個概念與平方有關,我們知道一一 1 2 1,2 2 4,3 2...
二分法求平方根(Python實現)
使用二分法 bisection method 求平方根。1 defsqrtbi x,epsilon 2assert x 0,x must be non nagtive,not str x 3assert epsilon 0,epsilon must be postive,not str epsilo...