給定一個正數a,不用庫函數求其平方根。ide
設其平方根爲x,則有x2=a,即x2-a=0。設函數f(x)= x2-a,則可得圖示紅色的函數曲線。在曲線上任取一點(x0,f(x0)),其中x0≠0那麼曲線上該點的切線方程爲函數
(1-1)spa
求該切線與x軸的交點得.net
(1-2)orm
由於1-2式中x0做爲分母,因此在以前限定了一下初始值不要選0。那麼獲得的這個與x軸的交點實際上是最終要求得的x的一次逼近,咱們再以這個x基準繼續迭代就能夠求得更逼近的x,至於逼近到何時纔算完,這個取決於你本身設定的精度。整個過程的迭代只須要幾步就能夠求得最終的結果。blog
代碼以下:ip
固然,從圖中能夠看出,當你所取的初始值的橫座標在紅色曲線與x軸交點右邊,即比最終的結果大時,好比選初始值x=a,咱們能夠將while語句裏面的abs(x*x-fToBeSqrted)直接換成fToBeSqrted -x*x,這樣能夠省去abs的運算。固然這不能確保效率的提高,由於初始值的選取直接影響了迭代的次數。ci