区間二分法による零点の探索

function avg(x, y) { return (x + y) / 2; }
function abs(x) { return (x >= 0) ? x : -x; }

function zelo_point(f, neg, pos) {
  var mid = avg(neg, pos);
  return abs(pos - neg) < 0.001 ? mid :
  f(mid) < 0 ? zelo_point(f, mid, pos) :
  f(mid) > 0 ? zelo_point(f, neg, mid) : mid;
}

print(zelo_point(Math.sin, 4, 2));

これで合ってたかな?「十分に小さい」の判定って、こうだったっけな…