「Think Java」の本を使用していますが、演習 7.6 で行き詰まっています。ここでの目標は、 を見つけることができる関数を書くことです。それはあなたにいくつかのヒントを与えます:
評価する 1 つの方法は、無限級数展開を使用することです。
つまり、i 番目の項が等しい一連の項を合計する必要があります。
これが私が思いついたコードですが、(Math.exp と比較すると) 1 の累乗以外の場合はひどく間違っています。本からの公式。これが数学の問題なのか、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();
}