Программа на C++
Составить программу, вычисляющую f(x) в виде бесконечного ряда с заданной точностью ε=10^
-3 (10^-6, 10^-9). Значение x вводится с клавиатуры. Проверить вычислении с помощью системной функции. Подсчитать количество итераций, потребовавшихся для получения результата с заданной точностью. (Слева функция, справа разложение в ряд)
У Вас в задании - грубая ошибка, потому что разложение гиперболического косинуса на самом деле такое:
ch x = Σ(n=0;∞)x²ⁿ/(2n)! , а вовсе даже не то, что у Вас написано. А вот так вот всё правильно:
#include <cmath>
#include <iostream>
using namespace std;
double ch(double x, double ε)
{
double y = x * x, p = 1., s = p, q = 0.;
while (p / s > ε)
{
q += 2.;
p *= y / (q * (q - 1.));
s += p;
}
cout << q / 2 << " iterations, ";
return s;
}
int main()
{
double ε, x, y;
cout.precision(16);
while (true)
{
cout << "x ε: ";
cin >> x >> ε;
if (fabs(x) > 710.47) break;
y = ch(x, ε);
cout << y << ", err=" <<
y / cosh(x) - 1. << endl;
}
cin.get();
cin.get();
return 0;
} Можно и без отдельной функции обойтись, но это не важно. Ошибка вычислений тут существенна только относительная, а абсолютная точность здесь вообще как-то неуместна так как ch(x) - всюду положительная функция экспоненциального роста. Количество итераций на единицу меньше взятого количества первых слагаемых ряда.