當前位置:首頁>職場>根號二的算法初一人教(面試題如何求根號2)
發(fā)布時間:2024-01-19閱讀(15)
Great Eagle 程序猿DD
來源:算法面試題
問題
小E最近找實習的時候,被面試官問了這樣一道題:如何求根號2的值?
小E沒能答上來,回來后向老師請教。
思路

















點評:以上介紹了二分法和牛頓迭代法來求解根號2,另外我們還可以通過泰勒公式法來求解。很多朋友可能會問,我們經(jīng)常調(diào)用的Math庫中sqrt(x)函數(shù)的實現(xiàn)用的是哪種方法呢?為了效率,sqrt(x)函數(shù)在底層是用C語言來實現(xiàn)的,實現(xiàn)過程非常巧妙,效率極高,用到了牛頓迭代法的思想,但又不完全是牛頓迭代法,我會將sqrt(x)庫函數(shù)的代碼放于文后,有興趣可以研究。
代碼實現(xiàn)
牛頓迭代法(JavaScript)
//求n的算術平方根,參數(shù)n不能為負數(shù)function sqrt(n) { //當n>=1時,從n開始迭代; //當n<1時,從1開始迭代 let res = n >= 1 ? n : 1; while(res * res - n > 1e-8) res = 0.5 * (res n / res); return res;}
附:
C語言實現(xiàn)的庫函數(shù)(源碼)
//源碼中求的是根號x的倒數(shù),參數(shù)x必須大于0float invSqrt(float x){ float xhalf = 0.5f*x; int i = *(int*)&x; //下面這句是核心,有興趣可閱讀相關論文 i = 0x5f375a86 - (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); //注:此函數(shù)返回的是根號x的倒數(shù) return x;}
歡迎分享轉(zhuǎn)載→http://m.avcorse.com/read-34110.html
Copyright ? 2024 有趣生活 All Rights Reserve吉ICP備19000289號-5 TXT地圖HTML地圖XML地圖