/**
   Naeherung der Quadratwurzel mit Heron's methode.
*/
public class RootApproximator {
    /** 
	Konstruiert einen RootApproximator fuer eine gegebene Zahl. 
	@param aNumber die gegebene Zahl.
	(Vorbedingung: aNumber >= 0)
    */
    public RootApproximator(double aNumber)
    {
	a = aNumber;
	xold = 1;
	xnew = a;
    }
    /** 
	Berechnung der naechsten Naeherung,
	@return die Naeherung.
    */
    public double nextGuess()
    {
	xold = xnew;
	if (xold != 0)
	    xnew = (xold + a/xold) / 2;
	return xnew;
    }
    /**
       Berechnen der Wurzel durch wiederholte Berechnung von Naeherungen.
       @return die Wurzel.
    */
    public double getRoot()
    {
	while (!Numeric.approxEqual(xnew, xold))
	    nextGuess();

	return xnew;
    }
    public static void main(String[] args) {
	System.out.println(new RootApproximator(2.0).getRoot());
    }
    private double a;
    private double xnew;
    private double xold;
}

		

