【问题标题】:This basic programme I wrote for exponents only works with integers - what did I do wrong?我为指数编写的这个基本程序只适用于整数——我做错了什么?
【发布时间】:2019-02-23 11:28:32
【问题描述】:

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

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

【问题讨论】:

  • 我看到你在使用while循环,如果b的输入是4.5,这个循环会“循环”多少次?
  • 谢谢您,先生。很明显,我:squared(facepalm, 10);
  • 因为我看不出有什么问题,所以我复制它并尝试了它:完全没有问题。 squared(2,4,5) 给出应有的 32.0。你没想到它会做一个乘法,只执行到一半,然后突然停在中间什么的,是吗?

标签: java math exponent


【解决方案1】:

如果b 是整数,您的程序将按预期运行,因为您的代码假定b 是整数。

无论b 是 4 还是 4.5,都会计算出相同的结果,因为 0 和 0.5 都小于 1(从而结束循环)。

【讨论】:

    【解决方案2】:

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

    首先,让我们以pow(2, 4.5) 为例,明确浮点指数的含义:

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

    如果我们有,其中b可以是浮点数,A是结果,我们可以取两边的对数:

    相当于:

    简化为:

    现在这可以很容易地在 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公式来计算:

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

    【讨论】:

      猜你喜欢
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多