日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

算术平方根解法

發(fā)布時(shí)間:2023/12/16 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算术平方根解法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

第一種方法,使用二分法。在一個(gè)區(qū)間內(nèi)每次拿中間數(shù)的平方來試,如果大了就左移中間數(shù),如果小了就右移。當(dāng)結(jié)果逼近真實(shí)值的時(shí)候取精度最高的結(jié)果。

//二分法求平方根,首尾兩端不斷逼近 float Sqrt(float m){const float eps = 1e-11;//eps用于控制結(jié)果的精度 if(m<0){cerr<<"無法求根"<<endl;return -1;}float mid,low,up,last;low = 0,up = m;mid = (low + up)/2;do{if(mid * mid > m)up = mid;elselow = mid;last = mid;mid = (low + up)/2; }while(fabs(last - mid) > eps); //不能使用abs,會(huì)提示函數(shù)有歧義 ,fabs可以直接傳float參數(shù) return mid; }
第二種方法,牛頓迭代法。↓↓↓↓↓↓↓↓以下描述取自百度百科

設(shè)r是 的根,選取 作為r的初始近似值,過點(diǎn) 做曲線 的切線L,L的方程為 ,求出L與x軸交點(diǎn)的橫坐標(biāo) ,稱x1為r的一次近似值。過點(diǎn) 做曲線 的切線,并求該切線與x軸交點(diǎn)的橫坐標(biāo) ,稱 為r的二次近似值。重復(fù)以上過程,得r的近似值序列,其中, 稱為r的 次近似值,上式稱為牛頓迭代公式。 用牛頓迭代法解非線性方程,是把非線性方程 線性化的一種近似方法。把 在點(diǎn) 的某鄰域內(nèi)展開成泰勒級(jí)數(shù) ,取其線性部分(即泰勒展開的前兩項(xiàng)),并令其等于0,即 ,以此作為非線性方程 的近似方程,若 ,則其解為 , 這樣,得到牛頓迭代法的一個(gè)迭代關(guān)系式: 。
簡(jiǎn)單來說就是,如要求A的算術(shù)平方根,先假設(shè)一個(gè)值x,然后不斷求(x+a/x)/2=x,不斷迭代。 float SqrtByNt(float m){const float eps = 1e-11;float x = m; float last;//用于記錄上一次迭代的值 do{last = x;x=(x+m/x)/2; }while(fabs(x-last)>eps);return x; }
接下來是卡馬克的神奇平方根算法,其實(shí)也是用了牛頓迭代法,但他設(shè)置了一個(gè)神奇的常數(shù)0x5f3759df來計(jì)算那個(gè)猜測(cè)值。 float InvSqrt (float x) {float xhalf = 0.5f*x;int i = *(int*)&x;i = 0x5f3759df - (i>>1);x = *(float*)&i;x = x*(1.5f - xhalf*x*x);x = x*(1.5f - xhalf*x*x);x = x*(1.5f - xhalf*x*x);return 1/x; }


總結(jié)

以上是生活随笔為你收集整理的算术平方根解法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。