c++ сумма бесконечных рядов с заданной точностью

#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <math.h>


int main()
{
    setlocale(0, "rus");
    int i = 1;
    float sum = 0;
    float e;
    int a = 0;
    scanf_s("%f", &e);
    while (abs(a) >= e)
    {
        a = (pow(-1,i) / pow(3, i) + pow(4, i));
        sum += a;
        i++;
    }
    printf("Сумма равна(c точностью) = %f", sum);

Что не так с кодом? Почему неправильно работает?Задание


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

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

ошибка 1:

int a = 0;
scanf_s("%f", &e);
while (abs(a) >= e)

а вам не кажется, что если e ввели ненулевое, то while вообще работать не будет?

лучше уж используйте do while или for без условия выхода (условие внутри цикла делать будете)

ошибка 2

a = (pow(-1,i) / pow(3, i) + pow(4, i));

это совершенно не та формула, которая у вас на картинке

у вас некорректно расставлены скобки.

я уже молчу про то, что -1 в формуле и не пахнет

→ Ссылка
Автор решения: Alexey Vesker

Считает неправильно потому, что вы считаете не по той формуле, которую привели. В строке:

a = (pow(-1,i) / pow(3, i) + pow(4, i));

Нужно правильно расставить скобки:

a = pow(-1,i) / (pow(3, i) + pow(4, i));
→ Ссылка
Автор решения: Harry

Сейчас меня заминусуют, но не могу молчать :)

Начнем с того, что у вас

int a = 0;

Ну как можно явно дробные члены хранить в целочисленном значении? Вы же начинаете нули суммировать...

Далее, формула не та, но даже если бы она была та... Ну не нужен здесь pow! И даже i не требуется :) Вот правильное решение:

double Sum(double eps)
{
    double sum = 0.0;
    for(double three = 1, four = 1, term = 2*eps /* :) */; term >= eps;)
    {
        three *= 3;
        four  *= 4;
        term = 1/(three + four);
        sum += term;
    }
    return sum;
}
→ Ссылка