我正在研究一种计算数字的第 nth 根的方法。但是,我遇到了负数的第 nth 根问题。
大多数人说要使用 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);
}
但是,它不适用于所有数字,因为根可以是小数。例如 root(-26, 0.8)
返回 -58.71
,但这是一个无效的输入。对于偶数根,这也会给出错误的答案。例如 root(-2, 2)
返回 -1.41421
,但 -2 没有平方根。
最佳答案
(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);
}
关于java - 第 n 个根实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6325793/