// $Id$

// Name: Gary T. Leavens
// Section: all

public class Sqrt {

    public static double sqrt(double x) {
	double guess = 1.0;
	while (!good_enough(guess, x)) {
	    guess = improve(guess, x);
	}
	return guess;
    }

    private static boolean good_enough(double guess,  // I left out static
				double x) {
        return Math.abs(guess * guess - x)  // Square.square has wrong type
	       < 0.00001;
    }

    private static double improve (double guess,
				   double x) {
        return average(guess, x / guess);    // I had left out return
    }

    public static double average(double x, double y) {  // added
        return (x + y) / 2;
    }

    public static void main(String argv[]) {
	System.out.println("sqrt(4.0) = " + sqrt(4.0));
	System.out.println("sqrt(2.0) = " + sqrt(2.0));
	System.out.println("sqrt(9.0) = " + sqrt(9.0));
	System.out.println("sqrt(10.0) = " + sqrt(10.0));
    }
}
