Вычисление бесконечной суммы ( ошибка в коде ) - C (СИ)
Формулировка задачи:
Вычислить бесконечную сумму с точностью е = 0,001. Считать, что требуемая точность достигнута, если очередное слагаемое оказалось по модулю меньше, чем е.
Изначально писал под линуксом. Поэтому и расписывал функцию abs
Помогите пожалуйста!
#include <stdio.h>
#include <math.h>
#define e 0.001
float abs(float x)
{
if (x<0)
return x*(-1);
else
return x;
}
float fact(float x)
{
if (x == 0)
return 1;
else if(x == 1)
return 1;
else
return x*fact(x-1);
}
int main()
{
float n=0,s=0;
float sum=0;
float x;
printf("Vvedite x: ");
scanf ("%f",&x);
while (abs(sum)<= e)
{
s=powf(-1.0,n)*powf(x,2*n)/fact(2*n);
sum+=s;
n++;
getchar();
return 0;
}Решение задачи: «Вычисление бесконечной суммы ( ошибка в коде )»
textual
Листинг программы
#include <math.h>
#include <stdio.h>
#define e 0.001
double func(double x, double eps) {
double aCurr = 1.0;
double sum = 0.0;
unsigned n = 1;
do {
sum += aCurr;
aCurr *= (-1.0)*x*x/( (2*n-1) * (2*n) );
++n;
} while (abs(aCurr) < eps);
return sum + aCurr;
}
int main() {
double sum=0.0;
double x;
printf("Vvedite x: ");
scanf ("%lf",&x);
sum = func(x, e);
printf("Sum: &lf", sum);
}
Объяснение кода листинга программы
- Подключение необходимых библиотек:
<math.h>и<stdio.h>. - Определение константы
e(маленькое число, определяющее погрешность вычислений). - Определение функции
func, которая принимает два аргумента:xиeps(маленькое число, определяющее погрешность вычислений). Внутри функции объявлены следующие переменные:aCurr(текущий член ряда),sum(накопитель суммы),n(номер текущего члена ряда). - Используется цикл
do-while, который выполняется до тех пор, пока абсолютное значение текущего члена ряда меньше заданной погрешности. - Внутри цикла происходит добавление текущего члена ряда к накопителю суммы и обновление значения текущего члена ряда.
- После выполнения цикла возвращается накопитель суммы, дополненный последним членом ряда.
- В функции
mainобъявлены две переменные:sum(накопитель суммы) иx(значение, которое необходимо вычислить). - Выводится сообщение с просьбой ввести значение
x. - Значение
xсчитывается с помощью функцииscanf. - Вызывается функция
funcс введенным значениемxи заданной погрешностьюe. - Результат вычисления функции
funcсохраняется в переменнойsum. - Выводится сообщение с результатом вычисления суммы.