/* sqrt. good 'ol Newton's method */ #include 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