我正在使用“think java”这本书,我被困在练习 7.6 上。这里的目标是编写一个可以找到. 它给了你一些提示:
一种评估方法是使用无限级数展开:
换句话说,我们需要将一系列项相加,其中第 i 项等于
这是我想出的代码,但对于除 1 的幂之外的任何内容,它都是非常错误的(与 Math.exp 相比)。我不明白为什么,据我所知,代码是正确的书中的公式。我不确定这是否更像是一个数学问题,或者与 double 和 int 可以容纳多大的数字有关,但我只是想了解为什么这不起作用。
public static void main(String[] args) {
System.out.println("Find exp(-x^2)");
double x = inDouble("Enter x: ");
System.out.println("myexp(" + -x*x + ") = " + gauss(x, 20));
System.out.println("Math.exp(" + -x*x + ") = " + Math.exp(-x*x));
}
public static double gauss(double x, int n) {
x = -x*x;
System.out.println(x);
double exp = 1;
double prevnum = 1;
int prevdenom = 1;
int i = 1;
while (i < n) {
exp = exp + (prevnum*x)/(prevdenom*i);
prevnum = prevnum*x;
prevdenom = prevdenom*i;
i++;
}
return exp;
} // I can't figure out why this is so inacurate, as far as I can tell the math is accurate to what the book says the formula is
public static double inDouble(String string) {
Scanner in = new Scanner (System.in);
System.out.print(string);
return in.nextDouble();
}