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));
これで合ってたかな?「十分に小さい」の判定って、こうだったっけな…