Задать вопрос
@muzclubs

Почему факториал уходит в нуль?

Добрый день.

Необходимо вычислить функцию разложения в ряд e^(-x^2+1).
Известно, что e^x= (x^0)/(0!) + (x^1)/(1!) + (x^2)/(2!).. Делать это до тех пор, пока значение суммы на i-том шаге будет по модулю больше 0.25. У меня в определенный момент факториал становится равным 0. Подскажите пожалуйста, в чём проблема?

import java.util.Scanner;

class V17{
	public static void main(String[] args){
		final double E = 0.25;
		int n = 5; // Число шагов
		double[] x = {-2.7, -0.1, 2.9, 17.9, 117.0};
		
		/*Scanner in = new Scanner(System.in)
		int n = in.nextInt();
		double[] x = new double[n];
		for(int k=0; k<x.length; k++){
			System.out.print("x" + k + " = ");
			x[k] = in.nextInt();
		}*/
		
		double[] answer = new double[n];
		double[] argStep = new double[x.length];
		for(int k=0; k<argStep.length; k++){
			argStep[k] = -1*Math.pow(x[k],2)+1;
		}
		
		double e, s, g;
		int fact, factK;
		for(int k=0; k<n; k++){
			s = 1; // Сумма шага
			e = 1; // Сумма общая
			g = 1; // x^i
		    fact = 1; 
            factK = 0;	
			while(Math.abs(s)>E){
				g = g*argStep[k];
				factK++;
			    fact=fact*factK;
				s = g/fact;
				System.out.println(fact);
				e = e + s;
			}
			answer[k] = e;
		}
		for(int k=0; k<answer.length; k++){
			System.out.println("e^(" + argStep[k] + ") = " + answer[k]);
		}
	}
}
  • Вопрос задан
  • 285 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 2
impwx
@impwx
Разработчик
Вы можете определить это самостоятельно с помощью пошаговой отладки:
  1. Ставите breakpoint на первой строке в функции
  2. Запускаете приложение в режиме отладчика
  3. Выполняете по одной инструкции (step to next instruction)
  4. Смотрите значения всех промежуточных переменных в каждый момент времени

Так можно найти момент, в который значение становится неверным, и определить причины, которые к этому привели.
Ответ написан
Комментировать
Объявите fact как вещественное
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@abcd0x00
Эти задачи решаются не через факториал, а через рекуррентные соотношения. Ты просто попал в ловушку для новичков. Они видят, что там факториал и начинают решать через факториал.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы