我有两种方法:幂和阶乘:
public static long pow(int x, int n) {
long p = x;
for (int i = 1; i < n; i++) {
p *= x;
}
return p;
}
public static long fact(int n) {
long s = n;
for (int i = 1; i < n; i++ ) {
s *= i;
}
return s;
}
这些返回 longs 的方法在我想要用它们计算指数函数时,与Math.exp(x)的结果不同。我的代码如下:
public static void exp(int x, double eps) {
int i = 1;
double pow = 1.0;
double fact = 1.0;
double sum = 0.0;
double temp;
do {
temp = pow/fact;
sum += temp;
pow = pow(x, i);
fact = fact(i);
i++;
}
while (temp > eps);
System.out.println("Check: " + Math.exp(x));
System.out.println("My: " + sum);
}
public static void main() {
int x = 10;
double eps = 0.0000000000001;
exp(x, eps);
}
当 x=10 时的输出如下:
检查:22026.465794806718
我的:21798.734894914145
x 越大,“精度损失”就越大(并不完全准确,因为你不能真正称之为精确...)。
问题在于,当方法 power 和 factorial 返回 double 时,输出结果才是正确的。有人能告诉我如何使其正常工作吗?
方法 pow 和 fact 必须返回 long,并且我必须在 exp 中使用它们(这是一项大学任务)。
long
的范围比正常的double
要小,这对我来说有点奇怪...谢谢。 - hodak