Condivido la soluzione che ho trovato... Ho poi cambiato la funzione ma lasciato l'algoritmo di bisezione invariato. per migliorare la precisione comunque si può provare a cambiare la condizione di uscita dell'algoritmo di bisezione confrontando anche il risultato che sia più vicino allo zero per esempio:
if ((b-a)<1e-8 && m < 0.01) return m;
Ovviamente si rischia che il tempo di convergenza dell'algoritmo sia troppo lungo...