// implementing square-root without calling any other functions // originally from w5 notes from class // added check for convergence // #include #include double mysqrt( double a) { double prev, x = a/2; for( int count = 0; count < 50; ++count) { prev = x; // save copy of x x = (x + a/x)/2; // update x printf( "x = %.18g\n", x); //debug if( x == prev) break; // converged } return x; } int main( void) { double a = 2; scanf( "%lf", &a); double x = mysqrt(a); double y = sqrt(a); printf( "a = %.18g\n", a); printf( "x = %.18g\n", x); printf( "y = %.18g\n", y); printf( "d = %.18g\n", x - y); return 0; } /* sample runs: x = 3.25 x = 3.00961538461538458 x = 3.00001536003932179 x = 3.00000000003932143 x = 3 x = 3 a = 9 x = 3 y = 3 d = 0 x = 251 x = 127.492031872509955 x = 67.6678296579155756 x = 41.2229503947159017 x = 32.7406409948669932 x = 31.6418602354120182 x = 31.6227823564825563 x = 31.6227766016843148 x = 31.6227766016837926 x = 31.6227766016837926 a = 1000 x = 31.6227766016837926 y = 31.6227766016837926 d = 0 */