@Domus

Где ошибка в алгоритме разложения cosx в ряд?

Добрый день!
Не могу уже какой день написать алгоритм разложения cosx в ряд - выдает совершенно не то. Подскажите пожалуйста, в чем проблема?
import java.util.Scanner;

class B17{
	public static void main(String[] args){
		final double E = 0.2;
		int n = 4;
		double[] x = {-0.2, 7.9, 19.2, 101,4};
		double[] answer = new double[n];
		double[] argCos = new double[x.length];
		for(int k=0; k<argCos.length; k++){
			argCos[k] = Math.pow(x[k],2)-x[k]+1;
		}
		
		double e, s, p, increaseX, g;
	    double fact, factK, factKplus;
		
		for(int k=0; k<n; k++){
			s = 1; // Сумма шага
			increaseX = Math.pow(argCos[k], 2); // Коэф. пост увеличения x^(2i)
			g = 1; // Хранение x^(2i)
			e = 1; // Общая сумма 
			fact = 1; // Хранение факториала
			factK = 0; // Нынешнее уможение факториала
			factKplus = 1; // Максимальный множитель факториала
			p = 1; 
			while(Math.abs(s)>E){
				g = g*increaseX;
				factK = factKplus;
				factKplus = factKplus+2;
				for(; factK<factKplus; factK++){
					fact = fact*factK;
				}
				s = p*g/fact;
				e = e + s;
				p=-p;
			}
			answer[k] = e;
		}			
		
		for(int k=0; k<answer.length; k++){
			System.out.println("cos(" + argCos[k] + ") = " + answer[k]);
		}
	}
}
  • Вопрос задан
  • 257 просмотров
Пригласить эксперта
Ответы на вопрос 3
@AVSomov
Правильно заданный вопрос - это уже половина ответа

Чтобы улучшить понимание вопроса:
1. Для начала укажите, какое разложение в ряд используется? Как вариант, ряд Тейлора: https://en.wikipedia.org/wiki/Trigonometric_functi... (но тогда переменная p должна быть инициализирована значением "-1")
PS: По возможности: приведите к процедурному стилю. В настоящий момент инициализация теста, расчет и вывод результата - все в одном методе. (сами же легко и запутаетесь)
Ответ написан
@muzclubs
Может быть тут нужно использовать BigInteger и bigdecimal? Просто числитель растет намного быстрее, чем знаменатель
Ответ написан
Комментировать
@abcd0x00
Ты неправильно решаешь
https://toster.ru/answer?answer_id=927676

Не надо хранить факториал, он вообще не используется в решении, это ловушка для тупых.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы