牛頓迭代法求平方根

牛頓迭代法的作用是使用迭代法來求解函數(shù)方程的根,簡單的說就是不斷地求取切線的過程.對(duì)于形如f(x)=0的方程,首先任意的估算一個(gè)解x0哄芜,再把該估計(jì)值代入原方程中.由于一般不會(huì)正好選擇到正確的解,所以有f(x0)=a.這時(shí)計(jì)算函數(shù)在x0處的斜率,和這條斜率與x軸的交點(diǎn)x1. f(x)=0中精確解的意義是族阅,當(dāng)取得解的時(shí)候,函數(shù)值為零(即f(x)的精確解是函數(shù)的零點(diǎn)).因此膝捞,x1比x0更加的接近精確地解.只要以此方法不分段的更新x坦刀,就可以取得無線接近的精確地解.但是也有可能會(huì)遇到牛頓迭代法無法收斂的情況.比如函數(shù)有多個(gè)零點(diǎn),或者是函數(shù)不連續(xù)的時(shí)候.

設(shè)x的m次方根為a


const float EPS = 0.00001;   
double sqrt(double x) {   
    if(x == 0) return 0;   
    double result = x; /*Use double to avoid possible overflow*/   
    double lastValue;   
    do{   
        lastValue = result;   
        result = result / 2.0f + x / 2.0f / result;   
    }while(abs(result - lastValue) > EPS);  
 return (double)result;  
 } 

更快的方法
在游戲雷神之錘III中有一段求平方根的代碼如下:

float Q_rsqrt( float number ) {   
    long i; float x2, y; const float threehalfs = 1.5F;  
    x2 = number * 0.5F;   
    y = number;   
    i = * ( long * ) &y; // evil floating point bit level hacking   
    i = 0x5f3759df - ( i >> 1 ); // what the fuck?   
    y = * ( float * ) &i;   
    y = y * ( threehalfs - ( x2 * y * y ) ); // 1st iteration   
    // y = y * ( threehalfs - ( x2 * y * y ) ); // 2nd iteration, this can be removed此處迭代次數(shù)越多绑警,精度越高.  
    #ifndef Q3_VM #  
    ifdef __linux__ assert( !isnan(y) ); // bk010122 - FPE?  
    #endif  
    #endif 
return y;   
}

這段代碼的作用就是求數(shù)number的平方根求泰,并返回它的倒數(shù).經(jīng)過測試,它的效率比牛頓法要快幾十倍计盒,也比C++標(biāo)準(zhǔn)的sqrt()函數(shù)要快好幾倍.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末渴频,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子北启,更是在濱河造成了極大的恐慌卜朗,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咕村,死亡現(xiàn)場離奇詭異场钉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)懈涛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門逛万,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人批钠,你說我怎么就攤上這事宇植〉梅猓” “怎么了?”我有些...
    開封第一講書人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵指郁,是天一觀的道長忙上。 經(jīng)常有香客問我,道長闲坎,這世上最難降的妖魔是什么疫粥? 我笑而不...
    開封第一講書人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮腰懂,結(jié)果婚禮上梗逮,老公的妹妹穿的比我還像新娘。我一直安慰自己悯恍,他們只是感情好库糠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著涮毫,像睡著了一般瞬欧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上罢防,一...
    開封第一講書人閱讀 51,274評(píng)論 1 300
  • 那天艘虎,我揣著相機(jī)與錄音,去河邊找鬼咒吐。 笑死野建,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的恬叹。 我是一名探鬼主播候生,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼绽昼!你這毒婦竟也來了唯鸭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤硅确,失蹤者是張志新(化名)和其女友劉穎目溉,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體菱农,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡缭付,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了循未。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片陷猫。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出绣檬,到底是詐尸還是另有隱情舅巷,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布河咽,位于F島的核電站,受9級(jí)特大地震影響赋元,放射性物質(zhì)發(fā)生泄漏忘蟹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一搁凸、第九天 我趴在偏房一處隱蔽的房頂上張望媚值。 院中可真熱鬧,春花似錦护糖、人聲如沸褥芒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽锰扶。三九已至,卻和暖如春寝受,著一層夾襖步出監(jiān)牢的瞬間坷牛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來泰國打工很澄, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留京闰,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓甩苛,卻偏偏與公主長得像蹂楣,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子讯蒲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容