/* Auteur: Nicolas JANEY          */
/* nicolas.janey@univ-fcomte.fr   */
/* Fevrier 2005                   */

import java.io.*;

public class RechercheDichotomiqueRacineCarree {
  static BufferedReader flux = new BufferedReader(new InputStreamReader(System.in));
 
  /* Fonction de recherche de la plus grande valeur       */
  /* entiere dont le carre est inferieur ou egal          */
  /* a une valeur flotante                                */
  /* v : Double test                                      */
  
  public static int entierInf(double v) {
    int inf = 0;
    while ( inf*inf <= v )
      inf++;
    return(inf-1);
  }

  /* Fonction de recherche dichotomique de la racine      */
  /* carree d'un reel                                     */
  /* v : Double test                                      */
  
  public static double racineCarree(double v,double epsilon) {
    int inf = entierInf(v);
    if ( inf*inf == v )
      return(inf);
    double bInf = inf;
    double bSup = inf+1;
    double m = 0.0;
    while ( (bSup-bInf) > epsilon ) {
      m = (bSup+bInf)/2;
      if ( m*m < v )
        bInf = m;
        else
        bSup = m; }
    return(m);
  }

  /* Fonction principale                                  */
  
  public static void main(String [] args) throws IOException {
  /* Lecture au clavier du nombre test                    */
    System.out.print("Valeur dont la racine est recherchee : ");
    double v = Double.valueOf(flux.readLine()).doubleValue();
    System.out.print("Precision souhaitee                  : ");
    double epsilon = Double.valueOf(flux.readLine()).doubleValue();
  /* Calcul et affichage des entiers d'encadrement        */
    int min = entierInf(v);
    System.out.println("Valeurs encadrantes : "+min+" et "+(min+1));
    double r = racineCarree(v,epsilon);
    System.out.println("Racine carree       : "+r);
    System.out.println("Au carre            : "+(r*r));
  }
}