Signiture:
double sqrt (double x);
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <assert.h>
double square_root(double x){
assert(x >= 0);
double low;
double high;
if(x < 1){
low = x;
high = 1;
}else{
low = 1;
high = x;
}
double mid = (low + high)/2;
while(fabs((mid * mid)-x) > 0.0000001){
if(mid * mid > x){
high = mid;
}else{
low = mid;
}
mid = (high + low)/2;
}
return mid;
}
double square_rootRecursiveHelper(double x, double low, double high){
double mid = (low + high)/2;
if(fabs(mid*mid - x) > 0.00000000001){
if(mid*mid > x)
return square_rootRecursiveHelper(x, low, mid);
else
return square_rootRecursiveHelper(x, mid, high);
}
return mid;
}
double square_rootRecursive(double x){
assert(x >= 0);
double result;
if(x < 1)
result = square_rootRecursiveHelper(x, x, 1);
else
result = square_rootRecursiveHelper(x, 1, x);
return result;
}
int main()
{
double result;
result = square_rootRecursive(1.1);
printf("%f\n", result);
return 0;
}