java - 不允许使用Math.pow时计算指数?

标签 java pow

我需要编写一个名为 pow2 的方法接受实数基数和整数指数作为参数。它应该将基数返回到给定的幂。您的代码应该适用于正指数和负指数。例如,调用 pow2(2.0, -2)返回0.25 。不要在您的解决方案中使用 Math.pow。

这是我到目前为止所拥有的:

public double pow2(double x,int y){
    double total=1;
    for(int i=1;i<=y;i++){
        total*=x;
    }
    return total;
}

但问题是当我尝试调用 pow(2.0, -2) 时,它返回我 1.0。如何实现这个方法?

最佳答案

您必须进行分支,具体取决于您的值是负值还是正值。

这是一个适用于递归的版本:

public double pow2(double x,int y){
    return _pow2(1.0, x, y);
}

private double _pow2(double res, double x, int y) {
    if (y < 0) return _pow2(res/x, x, y+1);
    if (y > 0) return _pow2(res*x, x, y-1);
    return res;
}

如果y太大或太小,那么你会遇到堆栈溢出,所以将其更改为非递归函数留给运算符(operator)。

编辑:关于您的最后一个问题,您将结果设置为 1.0 ,循环体永远不会被使用,因为 !(1 <= -2) ,因此您返回 1.0 的未修改结果

关于java - 不允许使用Math.pow时计算指数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15310375/

相关文章:

java - 将 char[] 转换为 byte[]

java VisualVM 无​​法看到本地 JVM 进程

C++ POW(X,Y) X negative double 和 Y negative double,给出 nan 作为结果

pow - pow(x, n)的迭代实现

java - Math.pow(-27.0,1.0/3) 返回 NaN

c++ - 在 C++ 中使用 pow() 没有得到预期的结果

java - Spring:使用事务性数据库方法处理长时间运行的 Web 服务调用的最佳方式?

java - 与单生产者模式相比,lmax disruptor 在多生产者模式下太慢

java - 使用 If 语句中定义的变量?

C 数学 pow() : unexpected results