Вычисление функции, заданной в виде суммы бесконечного ряда необходимо выполнить тремя способами в одной программе
- с заданной погрешностью eps;
- с заданным числом k первых членов ряда;
- по аналитической формуле f(x).
Функция cos(x+a), область сходимости |x|<1
Разложение в ряд:

#include <iostream>
#include <iomanip>
#include <cassert>
using namespace std;
double real(const char* msg) {
cout << msg;
double value;
cin >> value;
return value;
}
unsigned long long fact(unsigned long long n) {
assert(n <= 20);
return n <= 0? 1 : n * fact(n - 1);
}
int main() {
constexpr double pi_2 = 1.57079632679489662;
double x;
do x = real("x: "); while (fabs(x) >= 1);
auto a = real("a: ");
const auto cos_a = cos(a);
const auto sin_a = sin(a);
cout << "k: ";
unsigned long long k;
cin >> k;
if (k & 1) ++k;
auto eps = real("eps: ");
cout << fixed << setprecision(15);
bool flag = true;
auto sum = .0;
for (auto n = 0ULL, m = 1ULL; m < k; n += 2, m += 2) {
auto first = pow(x, n) * cos_a / fact(n);
auto second = pow(x, m) * sin_a / fact(m);
auto member = flag? first - second : first + second;
sum += flag? member : -member;
flag = !flag;
}
cout << "k:" << setw(22) << sum << '\n';
auto n = 2ULL, m = 3ULL;
auto prev = cos(a) - x* sin(a);
double next;
auto sm = prev;
flag = false;
while (m < k) {
auto first = pow(x, n) * cos_a / fact(n);
auto second = pow(x, m) * sin_a / fact(m);
next = flag? first - second : first + second;
if ((fabs(fabs(prev) - fabs(next)) <= eps)) break;
sm += flag? next : -next;
prev = next;
n += 2, m += 2;
flag = !flag;
}
cout << "eps:" << setw(20) << sm << '\n';
system("pause > nul");
}
P.S. Про аналитическую функцию слышал, про аналитическую формулу нет.