
/* sqrt.  good 'ol Newton's method */

#include <math.h>

double sqrt(x)
double x;
{
  double xn, xn1, dx;
  
  if (x < 0.0)
  	/* error */
	return(0.0);		/* need NaN here */

  xn = x;
  xn1 = xn / 2.0;		/* initial guesses */
  dx = 1.0;
  
  for ( ; (dx > 0.000000000001) || (dx < -0.000000000001) ; )
  	{
	xn1 = xn - (((xn * xn) - x) / (2 * xn));
	dx = xn - xn1;
	xn = xn1;
	}
  return(xn);
}

#ifdef TEST

double test[] = {2.0, 3.0, 4.0, 5.0};
main()
{
  int i;
  
  for (i = 0 ; i < 4 ; i++)
	printf ("%f: %f\n", test[i], sqrt(test[i]));
}
#endif
