EPI: https://code.google.com/p/elements-of-programming-interviews/source/browse/trunk/Square_root.cpp
public static double sqrt(double num) {
double left = 0, right = 0;
if (num < 1) {
left = num;
right = 1;
} else {
left = 1;
right = num;
}
while (left < right) {
double m = left + (right-left)/2;
if ((num-EPSILON)/m <= m && (num+EPSILON)/m >= m) {
return m;
} else if ((num-EPSILON)/m > m) {
left = m;
} else {
right = m;
}
}
return num;
}
Newton's method
f(x0)' = f(x0)/(x-x0)
x = x0/2+num/2x0 (the following code replaces x with y, num with x)
public static double sqrtNewton(double num) {
double x = num;
double y = x/2;
while (Math.abs((num-y*y)) > EPSILON) {
y = (x/y+y)/2;
}
return y;
}