开平方

计算开平方可以用二分查找来计算。 如:求根号10

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// 用二分查找,精度0.0001
function 二分开根号(x) {
  var start = 0, end = x,count=1;
  while (true) {
    var mid = start + (end - start) / 2;
    var sq = mid * mid;
    if (Math.abs(sq - x) < 1e-4) {
      console.info(mid,count);
      break;
    }
    if (sq < x) {
      start = mid;
    } else if (sq > x) {
      end = mid;
    } else {
      console.info(mid,count);
      break;
    }
    count++;
  }
}
二分开根号(10);
// 3.1622695922851562  18次循环
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
// 用牛顿迭代,精度0.0001
function 牛顿开根号(a) {
  // n_ = (n+a/n)/2;
  var n = 1, count = 1;
  var n_ = (n + a / n) / 2;
  while (Math.abs(n - n_) > 1e-4) {
    n = n_;
    n_ = (n + a / n) / 2;
    count++;
  }
  console.log(n_, count)
}
牛顿开根号(10);
// 3.162277660168379   6次循环

牛顿迭代法适用条件 #

求函数f(x)=0的解α。
必须满足如下条件才能用牛顿迭代法求方程的近似解。
函数的导数不为0;x属于区间[α−r, α+r];x0为α的近似值,即r>=|a-x0|;
函数在[α−r, α+r]内二阶导数连续;
x0足够接近根 α。

牛顿法的维基百科