def findzero(fun, a, b):
if fun(a)*fun(b)>0: raise ArgumentException
if a<b: a, b = b, a
if fun(a) == 0: return a
if fun(b) == 0: return b
mid = a+b/2
if fun(a)*fun(mid)<0: return findzero(fun, a, mid)
if fun(b)*fun(mid)<0: return findzero(fun, mid, b)