二分法
二分法:通过二分的方式,不断计算比较,推出根号2的一个近似值。
[1, 2]
[1, 1.5]
....
缺点:性能不高
牛顿迭代法
y = x^2 - 2 的图像
其实,计算根号2就是计算与 X 轴的交点。
切线是曲线的逼近
曲线上任一一点 (a, a^2-2) 处的切线为 y=2ax-a^2-2
这条切线和 X 轴的交点的横坐标为 0.5*(a + a/2);
根据这个结论,我们可以去逼近结果。
逼近的过程
取 x=2
做直线 x=2,和曲线相交于点 A(2, 2);
过 A 做切线 L1, 带入上面的 0.5*(a + a/2),可知与 X 轴相交于 (1.5, 0);
取 x=1.5
同理。
做直线 x=1.5,和曲线相交于点 B(1.5, 0.25);
过 B 做切线 L2, 带入上面的 0.5*(a + a/2),不断逼近结果,直到达到我们的精度为止。
实现源码
js - 牛顿迭代法
//求n的算术平方根,参数n不能为负数
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 - 更高效的计算方式