Вычислить сумму бесконечно заданного ряда с заданной точностью eps - C (СИ)
Формулировка задачи:
Вычислить сумму бесконечного ряда:
S=1/1-1/3+1/5-1/7...
Решение задачи: «Вычислить сумму бесконечно заданного ряда с заданной точностью eps»
textual
Листинг программы
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
double getElem(const int i) {
return 1.0 / ((i % 2 == 0 ? 1 : -1) * (i * 2 + 1));
}
double sum(const int i, const double eps) {
if ((getElem(i) + getElem(i + 1)) * (getElem(i) < 0 ? -1 : 1) < eps) return getElem(i);
return sum(i + 1, eps);
}
double sum(const double eps) {
return sum(0, eps);
}
int main() {
double eps = 0.0001;
printf("sum: %lf\n", sum(eps));
system("pause");
}
Объяснение кода листинга программы
В этом коде реализована вычислительная модель для определения суммы ряда, основанная на итеративном алгоритме.
- Функция getElem(const int i) вычисляет значение i-го элемента ряда на основе простой формулы. Она возвращает 1/((2i+1)*(-1)^(i%2))
- Функция sum(const int i, const double eps) рекурсивно вычисляет сумму ряда до i-го элемента с заданной точностью eps.
- Если сумма текущего и следующего элементов меньше eps, функция возвращает текущий элемент. В противном случае, она вызывает саму себя для следующего элемента ряда.
- Функция sum(const double eps) является оберткой для функции sum(const int i, const double eps), которая принимает eps в качестве единственного аргумента и итерирует до тех пор, пока сумма текущего и следующего элементов не станет меньше eps.
- В функции main() задается точность вычислений eps и вызывается функция sum(eps) для вычисления суммы ряда до тех пор, пока сумма текущего и следующего элементов не станет меньше eps. Результат выводится на консоль.
- Команда system(
pause) приостанавливает выполнение программы до тех пор, пока пользователь не нажмет любую клавишу.