Почему вычисления не останавливаются при (-2;2), не учитывая 0? Как можно задать предел, чтобы в консоли не отображалось 1.#INF00?

введите сюда описание изображения

    #include <stdio.h>
    #include <math.h>
    #include <locale.h>

    int main()

    {
        setlocale (LC_ALL, "Ukr");
        int k, i, f = 1, t = 0;
        float x, s, sum=0;
        printf (" Введiть значення x з промiжку (-2;2): ");
        scanf ("%f", &x);
        if (x>-2 && x<2) {
                for(k=1;;k++){
                    for(i=1; i<=k+3; i++){
                    f*=i;
                    s = pow((-1),k) * pow(x,(2*k-1))/(k*f);
                    sum+=s;
                    if (fabs(s)<pow(10,(-4)))
                    break;
                    t++;
                    printf("\n %d. %f", t, sum+s);
                    }
                }
        }
        else {
                printf ("\n Помилка\n");
        }
        return 0;
    }

Ответы (2 шт):

Автор решения: Zhihar

у вас нет выхода из цикла

for(k=1;;k++){

тот break, который

if (fabs(s)<pow(10,(-4)))
    break;

выходит только из

for(i=1; i<=k+3; i++){

в итоге у вас получается бесконечный цикл

P.S.

и кстати если уж вы делаете

sum+=s;

то зачем потом выводить sum + s

printf("\n %d. %f", t, sum+s);
→ Ссылка
Автор решения: Harry

Вот вся ваша задача:

#include <stdio.h>

int main()
{
    for(double x = -2; x <= 2.01; x += 0.1)
    {
        double term = -x/24, sum = term;
        double eps = 1e-4;
        for(int k = 2; term*term > eps*eps; ++k)
            sum += term *= -x*x*(k-1)/k/(k+3);
        printf("x = %.2lf  sum = %8.5lf\n",x,sum);
    }
}

Рассмотрите отношение двух соседних членов ряда - из этого считать будет и быстрее, и проще, и точнее, и без всяких мгновенно переполняющихся факториалов и использования ненужных вам pow...

→ Ссылка