我为指数编写的这个基本程序只适用于整数——我做错了什么?
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}}](https://latex.codecogs.com/gif.latex?2%5E%7B4.5%7D%20%3D%202%5E%7B%5Cfrac%7B9%7D%7B2%7D%7D%20%3D%5Csqrt%5B2%5D%7B2%5E%7B4%7D%7D)
所以为了计算这个,首先我们必须将浮点数转换为分数,然后计算幂和平方根。这是可行的,但它非常乏味,而且它们是更好的解决方案。
如果我们有
,其中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
函数,我们可以用牛顿-拉夫森公式来计算:

其中:!
表示数字的阶乘。
您的初始算法可用于计算具有整数指数的 x
的 pow
。
我正在构建一些基本程序,作为练习不同编程技术的一种方式。我以为我写了一个程序来计算指数,但它不能正常工作。
如果我输入整数,它工作正常。平方 (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)
:
所以为了计算这个,首先我们必须将浮点数转换为分数,然后计算幂和平方根。这是可行的,但它非常乏味,而且它们是更好的解决方案。
如果我们有,其中
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
函数,我们可以用牛顿-拉夫森公式来计算:
其中:!
表示数字的阶乘。
您的初始算法可用于计算具有整数指数的 x
的 pow
。