Вычисление суммы степенного ряда

Требуется написать код для вычисления суммы ряда

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) выводится для сравнения, потому что ряд сходится к этой функции.

→ Ссылка