Алгоритм вычисления бесконечной суммы с заданной точностью - 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, т.е. программа успешно завершилась.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д