我为指数编写的这个基本程序只适用于整数——我做错了什么?

This basic programme I wrote for exponents only works with integers - what did I do wrong?

我正在构建一些基本程序,作为练习不同编程技术的一种方式。我以为我写了一个程序来计算指数,但它不能正常工作。

如果我输入整数,它工作正常。平方 (2,5) 但 (2,4.5) 不起作用。

public static double squared(double a, double b) {
    double a1 = a;
    double sq = 0;      
    while (b > 1) {
        sq = a*a1;
        a =sq;
        b--;
    }
    return sq;
}

public static void main(String[] args) {
    System.out.println(squared(2,2));
}

如果 b 是一个整数,您的程序将按预期工作,因为您的代码假定 b 是一个整数。

无论b是4还是4​​.5,都会得到相同的结果,因为0和0.5都小于1(从而结束循环)。

您的算法适用于整数,但为了计算浮点指数的幂,您的方法将不起作用。

首先,让我们以 pow(2, 4.5):

为例,弄清楚浮点指数的含义

2^{4.5} = 2^{\frac{9}{2}} =\sqrt[2]{2^{4}}

所以为了计算这个,首先我们必须将浮点数转换为分数,然后计算幂和平方根。这是可行的,但它非常乏味,而且它们是更好的解决方案。

如果我们有A = x^{b},其中b可以是浮点数,A是结果,我们可以对两边取对数:

\log(A) = b \log(x)

相当于:

e^{\log(A)} = e^{b\log(x)}

简化为:

A = e^{b\log(x)}

现在这可以在 Java 中轻松完成:

public static void main(String args[]) {
    double a = 2;
    double b = 4.5;
    double A = Math.exp(b * Math.log(a));
    System.out.println(A);
}

如果你不想使用内置的exp函数,我们可以用牛顿-拉夫森公式来计算:

e^{x} = 1 + x/1! + x^{2}/2! + x^{3}/3!...

其中:! 表示数字的阶乘。 您的初始算法可用于计算具有整数指数的 xpow