I know this question is quite old, but here's my attempt. It's as fast as Michaels but much simpler Bisection[f_, int_, tol_, niter_] := Block[ {m = tol + 1, prev, ym, yl = f[Last@int]}, NestWhile[( prev = m; m = Total@#/2; ym = f[m]; If[ym*yl > 0, yl = ym; {First@#, m}, {m, Last@#}] ) &, int, ym != 0 && Abs[m - prev] > tol &, 2, niter] ] Testing it with func[t_?NumericQ] := 1 + NIntegrate[Sin[x^2] - x, {x, 0, t}]; Bisection[func, {1, 2.`20}, 10^-14, 1000] // Timing {0.109375, {1.9252809180739163253, 1.9252809180739234307}}