实现 double sqrt(double x) 并且 x >= 0。
计算并返回x开根后的值。
由于存在小数精确度的问题
所以在二分区间取值区间的时候 左右区间指针的差值在小于精确度的情况下 循环才应该结束
若x小于1 右指针应为1 因为小数开根会变大
public class Solution {
/**
* @param x: a double
* @return: the square root of x
*/
public double sqrt(double x) {
double l = 0, r = Math.max(x, 1.0);
double eps = 1e-12;
while(l + eps < r){
double mid = l + (r - l) / 2;
if(mid * mid < x){
l = mid;
}
else if(mid * mid > x){
r = mid;
}
else return mid;
}
return l;
}
}