C/C++

Программирование C++, ряд Тэйлора, функции

Как решить 8 номер?
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
double real(const char* msg) {
auto value = 0.0;
do {
cout << msg;
cin >> value;
cin.ignore(cin.rdbuf()->in_avail());
} while (fabs(value) >= 1.0);
return value;
}
double fact(int n) {
return n <= 0? 1 : double(n) * fact(n - 1);
}
double taylor(const double x, const double eps) {
auto mbr = 1.0;
auto sum = 1.0;
int n = 0;
do {
auto b = pow(2, n + 1) * fact(n + 1);
auto a = fact(2 * n) / (pow(2, n) * fact(n));
++n;
auto c = pow(x, n);
mbr = a / b * c;
sum += n & 1? mbr : -mbr;
} while (mbr >= eps);
return sum;
}
int main() {
auto x = real("x: ");
cout << "epsilon: ";
double eps;
cin >> eps;
auto control = sqrt(x + 1);
auto result = taylor(x, eps);
cout << fixed << setprecision(15)
<< " taylor: " << result << '\n'
<< "control: " << control << '\n';
system("pause > nul");
}
Александр Филиппов
Александр Филиппов
78 014
Лучший ответ
Очень просто - это же стандартная рекуррентная psq-техника (произведение, сумма, квалификатор)! Можно сумму ряда оформить в виде отдельной функции, а потом вводить иксы и эпсилоны чтобы сравнивать получающиеся суммы ряда со значениями выражений √(1+х). В общем так:
A J
A J
29 440