首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用幂方法计算Java中的n次方根

用幂方法计算Java中的n次方根
EN

Stack Overflow用户
提问于 2015-09-14 02:29:48
回答 9查看 29.9K关注 0票数 23

我试图用Math.pow(n, 1.0/3)在java中得到一个立方根,但是因为它可以除以双精度,所以不能返回确切的答案。例如,使用125时,结果为4.9999999999。有解决这个问题的办法吗?我知道有一个立方根函数,但我想解决这个问题,这样我就可以计算更高的根。

我不想四舍五入,因为我想知道一个数字是否有整数根,方法如下:Math.pow(n, 1.0 / 3) % ((int) Math.pow(n, 1.0 / 3))

EN

Stack Overflow用户

发布于 2020-04-27 02:07:12

使用二分法查找第n个根。这里是根据您的要求以任意精度查找第n个根的方法。

代码语言:javascript
复制
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;
    }
}
票数 0
EN
查看全部 9 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32553108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档