Add a line for debugging.
Code:
double square_root (double i, double t) {
double r = 1;
while( fabs((r*r)-i) <= t ) {
r = (i/(r + r)) / 2;
printf("r = %f\n", r);
}
return r;
}
Was the loop ever entered?
Maybe you want something more like this.
Code:
#include <stdio.h>
#include <math.h>
/* http://www.cs.mtu.edu/~shene/COURSES...06/sqrt-1.html */
double square_root(double i, double t)
{
double r = i, x = i;
for ( ;; )
{
r = ( (i / r) + r ) / 2.0;
if ( fabs(x - r) <= t )
{
break;
}
x = r;
}
return r;
}
int main()
{
double ans, input, tolerance = 0.000001;
for ( input = 1.0; input < 11.0; input += 1.0 )
{
ans = square_root (input, tolerance);
printf("square_root(%f) = %f\n", input, ans);
}
return 0;
}
/* my output
square_root(1.000000) = 1.000000
square_root(2.000000) = 1.414214
square_root(3.000000) = 1.732051
square_root(4.000000) = 2.000000
square_root(5.000000) = 2.236068
square_root(6.000000) = 2.449490
square_root(7.000000) = 2.645751
square_root(8.000000) = 2.828427
square_root(9.000000) = 3.000000
square_root(10.000000) = 3.162278
*/