/* sqrt.cpp - Compute by iteration the square root of a positive number
 */


#include <iostream>
#include <cassert>  
using namespace std;

// If x is negative, it returns -x, otherwise x
// The "inline" attribute makes this an open, or inline,
// routine.
inline double my_abs (double x)
{
  return (x >= 0.0)?x:(- x); // Remember conditional expressions
}

// It returns the square root of n. n is
// assumed to be non-negative.
double my_sqrt(double n)
{
  assert(n >= 0.0); // If n is negative, program terminates
  const double epsilon = 0.001; // Maximum error allowed between 
                                // two successive guesses
  double current_guess = 1.0;
  double new_guess = current_guess;

  do {
    current_guess = new_guess;
    new_guess = 0.5*(current_guess + n / current_guess);
  } while (my_abs(new_guess - current_guess) > epsilon);
  return new_guess;
}

int main()
{
	double userinput;

	cout << "Enter a non-negative real number: ";
	cin >> userinput;

	double val = my_sqrt(userinput);
	cout << "The square root of " << userinput << " is " << val << endl;
	return 0;
}
