为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

holdtom 2022-07-06 17:12:54
我正在构建一些基本程序作为练习不同编程技术的一种方式。我以为我写了一个程序来计算指数,但它不能正常工作。如果我输入整数,它工作正常,即。平方 (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));}
查看完整描述

2 回答

?
智慧大石

TA贡献1946条经验 获得超3个赞

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

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


查看完整回答
反对 回复 2022-07-06
?
皈依舞

TA贡献1851条经验 获得超3个赞

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


首先,让我们通过以下示例来明确浮点指数的含义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整数指数的 。


查看完整回答
反对 回复 2022-07-06
  • 2 回答
  • 0 关注
  • 94 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信