简单阐述原理。
这里涉及到数值分析的知识:
假设 逼近与
那么通过
的导数(及
该点所对应的斜率)我们能得到一个更加逼近于
的
下图即为牛顿法的迭代公式。
参考视频:【数值分析】速成牛顿迭代法|考试宝典|一定能听懂!!_哔哩哔哩_bilibili
下面我们就来套用下牛顿迭代的公式。
假设a * b = x^2(均>0的情况下),那么 (a + b)/2 更加逼近 x。
/**
* @description: 牛顿迭代求平方根
* @param {*} x 入参
* @param {*} n 辅助参数,越逼近目标(即x的根)越好。
* @return {*}
*/
function sqrt(x, n){
//x/2 是个不错的辅助参数
n = n || x/2;
let res = ( x/n + n ) / 2;
if(
res * res == x || //得到精确结果
res == ( x/res + res ) / 2 //或到达精度极限
) {
return res;
} else {
return sqrt(x, res) //迭代
}
}