我试图用Math.pow(n, 1.0/3)在java中得到一个立方根,但是因为它可以除以双精度,所以不能返回确切的答案。例如,使用125时,结果为4.9999999999。有解决这个问题的办法吗?我知道有一个立方根函数,但我想解决这个问题,这样我就可以计算更高的根。
我不想四舍五入,因为我想知道一个数字是否有整数根,方法如下:Math.pow(n, 1.0 / 3) % ((int) Math.pow(n, 1.0 / 3))。
发布于 2020-04-27 02:07:12
使用二分法查找第n个根。这里是根据您的要求以任意精度查找第n个根的方法。
import java.util.Scanner;
public class FindRoot {
public static void main(String[] args) {
try (Scanner scanner = new Scanner(System.in)) {
int testCase = scanner.nextInt();
while (testCase-- > 0) {
double number = scanner.nextDouble();
int root = scanner.nextInt();
double precision = scanner.nextDouble();
double result = findRoot(number, root, precision);
System.out.println(result);
}
}
}
private static double findRoot(double number, int root, double precision) {
double start = 0;
double end = number / 2;
double mid = end;
while (true) {
if (precision >= diff(number, mid, root)) {
return mid;
}
if (pow(mid, root) > number) {
end = mid;
} else {
start = mid;
}
mid = (start + end) / 2;
}
}
private static double diff(double number, double mid, int n) {
double power = pow(mid, n);
return number > power ? number - power : power - number;
}
private static double pow(double number, int pow) {
double result = number;
while (pow-- > 1) {
result *= number;
}
return result;
}
}https://stackoverflow.com/questions/32553108
复制相似问题