public class Newton {
    public static int j;
    
    public static double newt(MathFunction2 func, double a, double b, double epsilon) {
        double guess= 0.5*(a + b);
       
        for (j= 0; j < JMAX; j++) {
            double fval= func.fn(guess);
            double fder= func.fd(guess);
            double dx= fval/fder;
            guess -= dx;
            if ((a - guess)*(guess - b) < 0.0) {
                System.out.println("Error: out of bracket");
                return ERR_VAL;
            }
            if (Math.abs(dx) < epsilon) {
            	System.out.println("\nNewton iterations: "+ j);
                return guess;
            }
        }
        System.out.println("Maximum iterations exceeded");
        return guess;
    }
    public static final int JMAX= 50;
    public static final double ERR_VAL= -10E10;
}