問題
小E最近找實習的時候,被面試官問了這樣一道題:如何求根號2的值?
小E沒能答上來,回來後向老師請教。
思路
點評:以上介紹了二分法和牛頓迭代法來求解根號2,另外我們還可以通過泰勒公式法來求解。很多朋友可能會問,我們經常調用的Math庫中sqrt(x)函數的實現用的是哪種方法呢?為了效率,sqrt(x)函數在底層是用C語言來實現的,實現過程非常巧妙,效率極高,用到了牛頓迭代法的思想,但又不完全是牛頓迭代法,我會將sqrt(x)庫函數的代碼放於文後,有興趣可以研究。
代碼實現
牛頓迭代法(JavaScript)
function sqrt(n) {
let res = n >= 1 ? n : 1;
while(res * res - n > 1e-8)
res = 0.5 * (res + n / res);
return res;
}
附:
C語言實現的庫函數(源碼)
float 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);
return x;
}
複製代碼請前往https://blog.csdn.net/Great_Eagle/article/details/84780271
(完)
掃碼開啟算法之旅
不求讚賞,只求在看啦啦啦