我正在处理以下问题:
给定一个整数,如何在不使用任何内置函数的情况下找到该数字的平方根?
private static double computeSquareRootBinarySearch(double x, double precision) {
double start = 0;
double end = x / 2 + 1;
double mid = (start + ((end - start) / 2));
double prevMid = 0;
double diff = Math.abs(mid - prevMid);
while ((mid * mid != x) && (diff > precision)) {
if (mid * mid > x) {
end = mid;
} else {
start = mid;
}
prevMid = mid;
mid = (start + end) / 2;
diff = Math.abs(mid - prevMid);
}
return mid;
}我想出了上面的二进制搜索算法,但是我想知道在上面的算法中我能做什么优化吗?
发布于 2018-11-13 21:35:16
mid * mid不太可能等同于x,因此机会主义的mid * mid != x消耗的周期比它可能节省的要多。我建议完全放弃。Math.abs排除了赋值的一部分。x和precision都必须是正的。https://codereview.stackexchange.com/questions/207592
复制相似问题