/*
  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.
  Variante con chiamata a funzione.
*/

class NulloFunzione {

    /* la funzione di cui si vuole trovare lo zero */

  static double f( double x ) {
    return x*x-5*x-2;
  }


    /* la procedura principale */

  public static void main(String[] args) {
    double a=0,b=10;
    double e=0.01;
    double x=a;

    if( f(a)*f(b) >0 ) {
      System.out.println("La funzione non ha segno diverso negli estremi");
      System.out.println(f(a)+" "+f(b));
      return;
    }

    while( Math.abs(f(x))>e ) {
      x=(a+b)/2;
      System.out.println(a+" "+x+" "+b);

      if( f(x)*f(a) > 0 ) {
        a=x;
      }
      else {
        b=x; 
      }
    }

    System.out.println("Trovato valore "+f(x)+" per x pari a "+x);
  }
}
