java - 使用power方法在Java中计算n次方根

标签 java math double decimal nth-root

我试图在 Java 中使用 Math.pow(n, 1.0/3) 求立方根,但因为它除以 double ,所以没有返回确切答案。例如,对于 125,这给出 4.9999999999。有解决方法吗?我知道有一个立方根函数,但我想解决这个问题,以便计算更高的根。

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

最佳答案

由于无法使用 double 进行任意精度的演算,您有以下三种选择:

  1. 定义一个精度,您可以根据该精度确定 double 值是否为整数。
  2. 测试您拥有的double 的四舍五入值是否是正确的结果。
  3. BigDecimal 上做微积分对象,它支持任意精度 double 值。

选项1

private static boolean isNthRoot(int value, int n, double precision) {
    double a = Math.pow(value, 1.0 / n);
    return Math.abs(a - Math.round(a)) < precision; // if a and round(a) are "close enough" then we're good
}

这种方法的问题在于如何定义“足够接近”。这是一个主观问题,取决于您的要求。

选项 2

private static boolean isNthRoot(int value, int n) {
    double a = Math.pow(value, 1.0 / n);
    return Math.pow(Math.round(a), n) == value;
}

这种方法的优点是不需要定义精度。但是,我们需要执行另一个 pow 操作,因此这会影响性能。

选项3

没有内置方法来计算 BigDecimal 的双倍幂。 This question会让您深入了解如何去做。

关于java - 使用power方法在Java中计算n次方根,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32553108/

相关文章:

python - 如何使用 "step"参数创建一个 floor 函数

java - 双数据类型变量的范围检查

java - 计算机图形学 : Moving in the world

java - 如何在 ATG 存储库结构中表示 Oracle View

Mac OSX 中的 Java Midi 损坏了吗?

java - 为什么不支持从entrySet()返回的集合的add/addAll操作?

swift - 生成散点算法

perl - 简单: How do doubles work in Perl?

c++ - 某些测试的输入验证未按预期工作

java - jpanel无法制作7行2列的gridlayout