function [root, iter] = bisection(func, a, b, tol, max_iter)
    iter = 0;
    while (b - a) / 2 > tol && iter < max_iter
        iter = iter + 1;
        c = (a + b) / 2;
        if func(c) == 0
            break;
        elseif func(a) * func(c) < 0
            b = c;
        else
            a = c;
        end
    end
    root = (a + b) / 2;
end
