Нужно написать функцию, которая бы вычисляла сумму ряда 1/2 + 1/4 + 1/8.....с заданной точностью

Всех приветствую. Есть задача: написать функцию, которая бы вычисляла сумму ряда 1/2 + 1/4 + 1/8 ..... с заданной точностью. Прежде всего хочу сказать, что пошел на курсы совсем недавно. Никакой базы и каких-то знаний математики не имеются. Поэтому тяжело понять вообще с чего начинать писать функцию и куда двигаться. Направьте пожалуйста, или напишите пример кода решения задачи.. Хочу понять как решить правильно простейшим возможным способом (максимум используя один из циклов), без использования каких-либо массивов и тд. Всем спасибо за любую помощь!


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

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

1/2 + 1/4 + 1/8 + ...

Хочу понять как решить правильно простейшим возможным способом (максимум используя один из циклов), без использования каких-либо массивов и тд. Всем спасибо за любую помощь!

double calc_seq()
{
    return 1;
}

Ну и общий ход мыслей :)

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

как говорится, продолжите дальше по аналогии

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

С точностью eps?

double sum()
{
    return 1.0 - eps;
}

Для тех, у кого плохо с чувством юмора:

return 1 - exp(-log(2)*ceil(-log(eps)/log(2)));

Но "с точностью ε" - это значит, отличающееся от истинного не более чем на ε, так что 1 - вполне удовлетворяет этому условию, как и 1-ε...

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

Что обычно требуется чтобы вычислить частичную сумму ряда с заданной точностью?

Сама точность: eps. Точностью пользуются так: складывают члены ряда пока очередной член не станет меньше eps.

Способ для вычисления очередного члена ряда. Первый член равен 1/2. Следующий в два раза меньше. Следующий за ним ещё в два раза меньше. И так далее. Оператор чтобы перейти от текущего члена к следующему: a = a / 2.

Еще будет нужна переменная для суммы: s.

Псевдокод:

eps = ...
a = 1.0 / 2.0    # первый член ряда
s = 0.0          # сумма стартует всегда с нуля
while a >= eps:   # складываем пока на достигнута нужная точность
    s = s + a    # добавляем новый член в сумму
    a = a / 2.0  # вычисляем следующий член

# s - содержит нужную сумму

Замечание по поводу применения eps. То что мы суммируем до a < eps, не означает что мы приблизились к сумме бесконечного ряда на расстояние eps. Для данного конкретного ряда разница между конечной суммой и бесконечной может достигать 2 * eps. Для других рядов будут другие соотношения. Никаких общих оценок дать нельзя.

→ Ссылка