def bisection(f, a, b, tolerance):
    while(b - a > tolerance):
        m = (a + b)/2.0
        v = f(m)
        if v == 0:
            return v
        if f(a) * v > 0:
            a = m
        else:
            b = m
    return (a + b)/2.0
