猿问

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

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


如果我输入整数,它工作正常,即。平方 (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));

}


holdtom
浏览 95回答 2
2回答

智慧大石

b如果是整数,您的程序将按预期工作,因为您的代码假定b是整数。无论是 4 还是 4.5,都会计算相同的结果b,因为 0 和 0.5 都小于 1(从而结束循环)。

皈依舞

您的算法适用于整数,但是为了使用浮点指数计算幂,您的方法将不起作用。首先,让我们通过以下示例来明确浮点指数的含义pow(2, 4.5):2^{4.5} = 2^{\frac{9}{2}} =\sqrt[2]{2^{4}}所以为了计算这个,首先我们必须将浮点数转换为分数,然后计算幂和平方根。这是可行的,但它非常乏味,而且它们是更好的解决方案。如果我们有A = x^{b}, whereb可以是浮点数并且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函数,我们可以使用 Newton-Raphson 公式来计算:e^{x} = 1 + x/1! + x^{2}/2! + x^{3}/3!...其中:!表示一个数的阶乘。您的初始算法可用于计算pow具有x整数指数的 。
随时随地看视频慕课网APP

相关分类

Java
我要回答