#include <stdio.h>
#include <math.h>

double evalue ( double P [] , int d , double x ) {
  int i = 1 ; double k = P[0] ; double v = x ;
  for ( ; i < d ; i++ ) {
    k = x * P[i] + k ;
    x*=v;
  }
  return k ;
}

double racine ( double P[] , int d , double a , double b , double precision ) {

  double Pa = evalue ( P , d , a ) ;
  double Pb = evalue ( P , d , b ) ;
  printf ( "P(%f) = %f, P(%f) = %f\n" , a, Pa, b, Pb ) ;
  double distance = fabs ( a - b ) ;

  if (Pa * Pb > 0) {
    printf( "Mauvais usage\n");
    exit (1);
  }

  if (Pa > 0)
    return racine (P, d, b, a, precision);
    
  if ( distance > precision ) {
    if ( evalue ( P , d , ( a + b ) / 2 ) < 0 )
      return racine ( P , d , ( a + b ) / 2 , b , precision ) ;
    else
      return racine ( P , d , a , ( a + b ) / 2 , precision ) ;
  }
  return ( a + b ) / 2 ;
}

void decalage ( double P [] , int d , double x ) {

  //à finir

}

int main ( int argc , char ** argv ) {

  double P [ 2 ]  = { 2 , -1 } ;
  printf ( "%f" , racine ( P , 2 , 1 , 5 , 0.001 ) ) ;

}

