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