bisection

my example

JavaScript

function ff(x) {
  return Math.cos(x) - 0.33 * x;
}

function bisection(func, xLo, xHi, eps) {
  if (func(xLo) * func(xHi) > 0)
    return undefined;

  var xMid, fHi, fLo, fMid;
  fHi = func(xHi); // fb
  fLo = func(xLo); // fa
  
  var iter = 0;
  while (xHi - xLo > eps) {
    ++iter;
    xMid = (xLo + xHi) / 2;
    fMid = func(xMid); // fc
    //console.log ('f(c) = ' + fMid);
    if (Math.abs(fMid) < eps)
      return [xMid, iter];
    else if (fMid * fLo < 0) { // fa*fc < 0 --> [a,c]
      xHi = xMid;
      fHi = fMid;
    } else { // fc*fb < 0 --> [c,b]
      xLo = xMid;
      fLo = fMid;
    }
  }
  
  return [(xLo + xHi) / 2, iter];
}

var ans = bisection(ff, 1, 3, 1e-4);

alert('in ' + ans[1] + ' iterations: ' + 'f(' + ans[0].toFixed(3) + ')= ' + ff(ans[0]).toExponential(3));