Бесконечная сумма C
Каким образом можно вычислить бесконечную сумму с значением, которые по модулю превышают заданную точность s = 10^-4 (0.0001). У меня есть код,но я не понимаю как прикрутить сюда точность.
#include <stdio.h>
#include <math.h>
void main()
{
int k,j,l;
double x,sum = 0,sum2;
scanf("%lf",&x);
double inf = INFINITY;
if (x >= -2 && x <= 2){
for (k = 1;k <= inf ;k++){
for (sum;sum >= 0.0001 && sum <= 2;)
sum += pow(-1,k-1)*pow(x,3*k+1) / (3*k*k) +1;
printf("Число %f",sum);
}
}
else{
printf("Error! ");
}
}
Ответы (2 шт):
Примерно так:
k = 0;
while(True) {
k++;
t = pow(-1,k-1)* ...
if (abs(t)<0.0001) break;
sum += t;
}
Только для вычисления t нужна правильная формула, на картинке сомнительный знаменатель, а ещё лучше вычислять очередной член рекуррентно (на основе предыдущего)
Не могу молчать! :)
Когда я вижу вот такое — sum += pow(-1,k-1)*pow(x,3*k+1) / (3*k*k) +1; — пусть даже для записанной вами формулы "делить на 3kk+1!" — у меня, как говорил капитан из "72 метра", начинает чесаться в самых нескромных местах. Посмотрите сами, на что вы делите? Не менее прекрасно и даже уникально сравнение k <= inf... Вы всерьез намеревались дождаться, когда k превзойдет бесконечность? :) Даже не будем вдаваться в то, что это всего 32 бита... О применении pow для чередования знака на этом фоне я уже просто молчу — мелочь, не стоящая упоминания.
Мне все же кажется, что тут потеряны скобки, и ваша функция имеет вид
Попробуйте найти отношение двух соседних членов сами. Как только вы его найдете, все сразу очень упростится:
double f(double x, double eps)
{
double x3 = x*x*x;
double t = x3*x/6, s = t;
for(int k = 2; abs(t) > eps; ++k)
s += t *= -x3*(k-1)/k/(k+1);
return s;
}
Кстати, непонятно, зачем у вас условие от -2 до 2 — ряд сходится при любых x.

