您的位置:首页 > 其它

[LinkedIn] Find Sqrt square root of a number (binary search)

2015-04-06 14:46 435 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: