У меня есть два метода: мощность и факториал:
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);
}
и вывод для х = 10:
Проверка: 22026.465794806718
My: 21798.734894914145
чем больше х, тем больше «потеря точности» (не совсем так, потому что вы не можете назвать ее точной ...).
Поворот заключается в том, что когда методы power и factorial return double , тогда выходной сигнал правильный. Может кто-нибудь объяснить мне, как заставить это работать?
Методы pow и факт должны возвращаться долго, и я должен использовать их в exp (задание колледжа).