public int sqrt(int x) {
if (x < 2) return x;
double epsilon = 0.000001;
double left = 0, right = x;
double ans = 0, sqr = 0;
while (true) {
ans = left + (right - left) / 2.0;
sqr = ans * ans;
if (sqr <= x+epsilon && sqr >= x-epsilon) {
break;
} else if (sqr > x+epsilon) {
right = ans;
} else {
left = ans;
}
}
return (int)ans;
}
for double
public double sqrt(double x) {
if (x < 0) return -1;
if (x == 0 || x == 1) return x;
double epsilon = 0.000001;
double left = 0, right = x;
if(Double,compare(x,1.0) < 0) {
right = 1.0;
}
while (Double.compare(right-left, epsilon) > 0) {
double mid = (right + left)/ 2.0;
double midSqr = mid * mid;
if(Double.compare(midSqr, x) == 0) {
return mid;//find exact solution
} else if(Double.compare(midSqr, x) < 0) {
left = mid;
} else {
right = mid;
}
}
return (left + right) / 2.0;
}