/* Calcul d'une racine carree                  */

public class RacineCarreeEnConsole {

/////////////////////////////////////////////////

/* Constante de definition de la precision     */
/* de calcul                                   */

  static final double EPSILON = 0.00000000000001;

/* Fonction recursive de calcul                */
/* de la racine carree d'un nombre reel        */

  static double racine(double x,double a,double b) {
    double res;
    double m = (b+a)/2.0;
    if ( b-a > EPSILON ) {
      if ( m*m > x ) {
        res = racine(x,a,m); }
        else {
        res = racine(x,m,b); } }
      else {
      res = m; }
    return res;
  }

/* Calcul d'une racine carree                  */

  static double racineCarree(double x) {
    double v = racine(x,0.0,1.0);
    return v;
  }

/////////////////////////////////////////////////

/* Programme principal                         */

  public static void main(String [] args) {
    Console.setTitle("RacineCarree");
    double x;
    double racine;
    Console.afficher("Valeur ? ");
    x = Console.saisirDouble();
    racine = racineCarree(x);
    Console.afficherln("Racine : ",racine);
    Console.afficherln("Sqrt   : ",Math.sqrt(x));
  }
}