Если код выглядит сложным, то, скорее всего, он действительно слишком сложный.
Давайте сконцентрируемся на этой части:
x = ((((-1 * pow(t-tm,3)) + (3 * pow(t-tm,2)) - (3 * (t-tm)) + 1) / 6) * punkty[koniec - 2]) +
((((3 * pow(t-tm,3)) - (6* pow(t-tm,2)) + 4) / 6) * punkty[koniec - 4]) +
((((-3 * pow(t-tm,3)) +(3 * pow(t-tm,2)) + 3*(t-tm) +1) / 6) * punkty[koniec - 6]) +
(((pow(t-tm,3))/6) * punkty[koniec - 8]);
Затем вы можете ввести
auto temp = t-tm;
Далее, в формуле у вас есть четыре различных термина. Я не вижу их в вашем коде. Сделайте их явными
auto x_term1 = - pow(temp,3) + (3 * pow(temp,2)) - (3 * temp + 1);
x_term1 *= punkty[koniec - 2] / 6;
auto x_term2 = ...
...
x = x_term1 + x_term2 + x_term3 + x_term4;
Вполне вероятно, что при рефакторинге кода, который будет читабелен, вы уже решите проблему. Если вы не используете ручку и бумагу (или аналогичные), чтобы получить пример выходных данных, например, ввод для каждого отдельного термина (вы должны делать это в любом случае, чтобы вы могли проверить свой код без проверки изображения). Затем используйте отладчик, чтобы увидеть, какой термин выключен.
PS: Лучше не использовать pow
для возведения в квадрат чисел. pow
- для показателей с плавающей запятой, которые стоят дороже, чем вам нужно здесь. Я просто не хотел менять ваши реальные расчеты.