给一个浮点数num, 如何求其立方根ans?首先 0 < |ans| < num,对于浮点数区间的海量数据,若采用加法枚举判断,那绝对把CPU能累死。计算精度越高,时间复杂度越高。
上述方法,只是简单的加法性线性探测。
如果采用对数级别线程探测,就可以短时间求出结果。
二分查找法
(0,num) 区间数,顺序递增,刚好符合二分法条件。
public static double cubeRoot(double num) {
double left = 0;
double right = num;
if (num < 0) {
left = num;
right = 0;
}
double mid = (left + right) / 2;
double ans = mid* mid *mid;
while (Math.abs(num - (ans)) > 1e-5) {
mid = (left + right) / 2;
ans = mid * mid * mid;
if (ans - num > 1e-5) {
right = mid;
} else if (num - ans > 1e-5){
left = mid;
}
}
return mid;
}