乙個數開根號的二分法和牛頓法

2021-08-16 09:22:13 字數 638 閱讀 4166

偶然在知乎上看到求解乙個數開根號怎麼求,閒來無事練習下c;

首先自己想到的就是二分法,寫出來了才知道這個叫二分法,是乙個比較直觀的方法,比如求in的開根號,設定乙個low,乙個high,每次用low和high 的中值的平方去和in比較,在誤差範圍之內就退出,誤差大就繼續迭代,然後根據每次比較的結果更新low和high 的值,最後得到乙個理想的結果。

牛頓法是在網上查的,做二分法時,感覺到可能迭代的太慢,二分肯定不是最優的,剛好看到牛頓迭代,在紙上畫了下感覺也比較簡單,就是求乙個二次方程的根,根據切線方法來迭代,一下子找到迭代的規則,就可以寫出來了。

下面是二分法和牛頓法的求根號的結果,按理說是牛頓比較快,感興趣的可以研究下:

#include #include #include double twofen(double in)

low=0;

high=in;

while(fabs(in-out*out)>0.0001)

else if(out*out0.0001)

return next;

}void main()

注意的是都是double型別,如果不小心設定了int型,或者不小心用了abs,沒用fabs就會得不到正確的結果哦。

二分法 牛頓法開根號

牛頓法 public static double sqrtn1 double value,double accurary double init 1.0 while math.abs init init value accurary return init 二分法和牛頓法的時間複雜度都是o logn...

二分法求方程的根 二分法開根號和牛頓迭代法

在刷水題的時候看到乙個要開根號的,雖然可以math.sqrt 解決這個問題 problem 2009 acm.hdu.edu.cn 抱著好玩的心態,找到了關於開根號的兩種演算法,二分法開根號和牛頓迭代法。第一種是二分法開根號,當start end的時候,先計算mid,然後比較mid的平方是不是 x,...

二分法和牛頓迭代實現開根號函式 OC的實現

最近有人貼出bat的面試題,題目鏈結。就是實現系統的開根號的操作,並且要求一定的誤差,其實這類題就是兩種方法,二分法和牛頓迭代,現在用oc的方法實現如下 double sqrt binary int num else return y 呼叫 double result self sqrt binar...