Алгоритм вычисления бесконечной суммы с заданной точностью - C (СИ)
Формулировка задачи:
Здравствуйте, хотелось бы сразу перейти к сути, в общем есть следующая задание, смотреть вложение.
А также есть строгие требования, из-за которых каждый член заданной нам последовательности должен вычисляться не по новой, а благодаря вычислениям выполненным на стадии вычисления предыдущего члена последовательности.
В данном случаи, как я понимаю, нельзя позволять себе вычислять факториал на каждой итерации, из-за чересчур быстрого роста.
Как итог я имею следующую код, которая судя по всему работает неверно, хотелось бы услышать ваше мнение, а может быть и увидеть и ваш код, господа и дамы. Буду благодарен за любую активность.
Поиском пользовался, находил что-то подобное, но там задачи решались в лоб, что мне совершено не подходит.
#include <stdio.h> #include <math.h> #include <stdlib.h> main(){ float eps,sum,a; int k; printf("Enter eps\n"); scanf("%f",&eps); a=-1.0; sum=sum+a; k=2; while(fabs(a)>eps){ a=a*(-1/k); k=k+1; sum=sum+a; } printf("%f\n",sum); system("pause"); }
Решение задачи: «Алгоритм вычисления бесконечной суммы с заданной точностью»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <math.h> int main( void ) { double eps = 0.00001; double curr = -1; double sum = curr; int counter = 2; while ( fabs( curr ) >= eps ) { curr *= -1.0 / counter++; sum += curr; } printf( "сумма = %f\n", sum ); return EXIT_SUCCESS; }
Объяснение кода листинга программы
- Подключение необходимых библиотек: iostream, cmath
- Объявление переменных: a. eps — погрешность вычислений, равная 0.00001; b. curr — текущее значение члена ряда, равное -1; c. sum — сумма ряда, равная первому члену ряда, то есть curr; d. counter — счётчик, определяющий номер текущего члена ряда.
- Запуск цикла while, который выполняется до тех пор, пока абсолютное значение текущего члена ряда (curr) не станет меньше или равно погрешности (eps).
- Внутри цикла while выполняем следующие действия: a. Умножаем текущий член ряда на -1.0/counter (меняем знак и делим на текущее значение счётчика); b. Обновляем значение sum, добавляя к нему текущий член ряда; c. Увеличиваем значение счётчика на 1.
- После выполнения цикла while выводим на экран значение суммы ряда (sum).
- Возвращаем EXIT_SUCCESS, т.е. программа успешно завершилась.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д