/*
  Trova un punto in cui una funzione f(x) ha un
  valore sufficientemente vicino allo zero.
  Siano a e b due valori tali che f(a) ha segno
  opposto a f(b). Si assume che la funzione sia
  continua.
*/

class Nullo {
  public static void main(String[] args) {
    double a=0,b=10;
    double c,d;
    double e=0.01;
    double x,f,f1,f2;

    f1=a*a-5*a-2;
    f2=b*b-5*b-2;

    if( f1*f2 >0 ) {
      System.out.println("La funzione non ha segno diverso negli estremi");
      System.out.println(f1+" "+f2);
    }
    else {
      c=a;
      d=b;
  
      while( d-c>e ) {
        x=(c+d)/2;
        System.out.println("Intervallo: ["+c+","+d+"], Medio: "+x);
  
        f=x*x-5*x-2;
        f1=c*c-5*c-2;
        f2=d*d-5*d-2;
  
        if( f*f2 < 0 ) {
          c=x;
        }
        else if( f*f1 < 0 ) {
          d=x; 
        }
        else {
          c=x;
          d=x;
          break;
        }
      }
  
      System.out.println("Trovato intervallo ["+c+","+d+"]");
    }
  }
}
