Вычисление суммы степенного ряда
Требуется написать код для вычисления суммы ряда
1+2x/1!+(2x)^2/2!+(2x)^3/3!+...
Написал код, в чем ошибка?
#include <stdio.h>
#include <math.h>
double factorial(int k)
{
int factorial = 1;
while( k > 0)
{
factorial *= k;
k--;
}
return factorial;
}
double count(double x, double eps)
{
double current, previous, sum = 1, f;
int n = 2, k;
k = n;
f = factorial(k);
current = pow( 2 * x,n) / f;
do{
n++;
k = n;
previous = current;
f = factorial(k);
current = pow( 2 * x,n) / f;
sum += current;
} while (fabs(current - previous) > eps);
return sum;
}
int main()
{
double x, eps, result;
printf("x = ");
scanf ("%lf", &x);
printf("eps = ");
scanf ("%lf", &eps);
result = count(x, eps);
printf("summa = %lf\n", result);
return 0;
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Такие ряды так не пишутся. Мгновенно переполняется факториал, вычисление неэффективное... Вы еще и один член вообще пропустили. Критерий точности у вас... ну, обычно сравнивается с ε не разность соседних членов, а сам член.
Правильный "кодбв" лучше писать так:
int main()
{
double x, eps;
printf("Input x: ");
scanf("%lf",&x);
printf("Input eps: ");
scanf("%lf",&eps);
double term = 1, sum = 1;
x *= 2;
for(int k = 1; fabs(term) > eps; k++) sum += (term *= x/k);
printf("y = %lf, exp(2x) = %lf\n",sum,exp(x));
}
exp(2x) выводится для сравнения, потому что ряд сходится к этой функции.