第n个根实现

Wil*_*ill 20 java math nth-root

我正在研究计算数字的第n 根的方法.但是,我遇到了负数的 n 根问题.

大多数人都说要使用Math.pow(num, 1 / root),但这对负数不起作用.

我试过这个:

public static double root(double num, double root) {
    if (num < 0) {
        return -Math.pow(Math.abs(num), (1 / root));
    }
    return Math.pow(num, 1.0 / root);
}
Run Code Online (Sandbox Code Playgroud)

但是,它不适用于所有数字,因为根可以是小数.例如root(-26, 0.8)返回-58.71,但这是无效输入.即使是根也会给出错误的答案.例如root(-2, 2)返回-1.41421,但-2没有平方根.

Eng*_*uad 15

(num) ^ (1/root)类似于exp( (1/root) * log(num) ),所以你可以这样做:

public static double root(double num, double root)
{
    return Math.pow(Math.E, Math.log(num)/root);
} 
Run Code Online (Sandbox Code Playgroud)

  • @FeayJaranaManotumruksa您不能指望浮点函数能给出确切的答案.这不会发生. (3认同)

Qua*_*nic 9

你想做什么?除非您计划完全正确地处理复数,否则不能取负数的第n个根.

例如,虽然(-8)^(1/3)有一个主要分支-2,但是唯一的分支(-4)^(1/2)2i-2i.

要正确处理这个问题,您需要将数字转换为极坐标形式,然后以该形式获取所需的根.

-8复数也是如此8*exp(i*pi).在1/3那根2*exp(i*pi/3),2*exp(i*pi)2*exp[i*(-pi)/3].然后你可以使用de Moivre'公式来计算表单中的根a + bi.