/*
 * app_sqrt.c
 * This program reads a positive number and approximates is square root.
 */

#include <stdio.h>

int main ()
{
  float       x;
  float       app;
  const float epsilon = 0.0001;

  /* Read a non-negative number. */
  do
  {
    printf ("Please enter a positive number: ");
    scanf ("%f", &x);
  } while (x <= 0);

  /* Approximate the root using an ancient Babylonian technique. */
  app = x/2;              /* Initial guess. */
  do
  {
    /*                                               app + x/app
     * Refine the approximation by computing: app = -------------
     *                                                   2
     */ 
    app = (app + x/app)/2;

    /* We proceed until (|app^2 - x| < epsilon): */
  } while (! ((app*app - x < epsilon) && (app*app - x > -epsilon)));

  /* Print the result. */
  printf ("The square root of %g is approximately %g\n", x, app);
 
  return (0);
}

