Вычислить сумму (произведение) конечного ряда. Предусмотреть пропуск слагаемых (множителей), которые равны нулю или бесконечности
В даном цикле есть сумма и производная, когда указываешь значение k > 4, выдает inf , а мне нужно избавиться от него, нигде не смог найти ответ, подскажите пожалуйста. Код по-сути готов, но нужно избавится от бесконечности в U,prod,sum
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <windows.h>
int main()
{
SetConsoleOutputCP(1251);
SetConsoleCP(1251);
float U, x, k, t,i;
printf("Введіть значення x\n");
scanf("%f",&x);
printf("Введіть значення k\n");
scanf("%f",&k);
float prod = 1;
for(t=2;t<=k;t++)
{
prod *= ((t*pow(x,t))/(t-12));
printf("prod = %5.5f\n",prod);
if (prod == -0.000) continue;
}
float sum = 0;
for(i=1;i<=t;i++)
{
sum += ((i-4)/(i-6));
printf("sum = %5.5f \n",sum);
if (sum == -0.000) continue;
}
U = (prod*sum);
printf("U = %5.5f \n",U);
return 0;
}
Ответы (1 шт):
Сначала циклы должны быть вложены друг в друга, ведь граница суммы зависит от переменной t, которая участвует в цикле умножения.
for(t=2;t<=k;t++) {
prod *= ((t*pow(x,t))/(t-12));
printf("prod = %5.5f\n",prod);
if (prod == -0.000)
continue;
// } // цикл t
float sum = 0;
for(i=1;i<=t;i++) {
sum += ((i-4)/(i-6));
printf("sum = %5.5f \n",sum);
if (sum == -0.000)
continue;
} // цикл i
prod *= sum ;
} // цикл t
//U = (prod*sum);
U = prod ;
Бесконечность могут дать числа где участвуют переменные t ≈ 12 и i ≈ 6. Так как происходит деление на число, близкое к нулю.
Дальше проверять надо элементы, которые дают бесконечность не простым оператором ==, а диапазоном, так как типы с плавающей точкой не могут представлять цифры точно.
В первом участке так :
if (t < 11.999f || t > 12.001f )
prod *= ((t*powf(x,t))/(t-12.f));
И во втором :
if (i < 5.9999f || i > 6.0001f)
sum += ((i-4.f)/(i-6.f));
Дальше надо проверять на умножение множителей, близких к нулю, но не так if (prod == -0.000). А с диапазоном и не результат умножения, а множитель.
Например так :
if ( sum < -0.00001f || sum > 0.00001f )
prod *= sum ;
И т.д.