Вычислите с точностью [latex]\varepsilon[/latex] cумму ряда [latex]\sum\limits_{i=1}^{\infty}{\frac{2^i}{i!}}[/latex]
Тесты
Точность | Сумма |
0.00001 | 6.38905 |
Алгоритм решения
Сначала находим отношение двух соседних членов ряда. Это [latex]2/(i+1)[/latex]. Дальше в цикле for прибавляем значение очередного элемента к переменной [latex]sum[/latex] до тех пор, пока очередной элемент не станет меньше заданной точности. Значение [latex]sum[/latex] равно двум, так как при [latex]i=1[/latex] значение суммы равно 2.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#include <iostream> #include <cmath> using namespace std; int main() { double E, a = 2, sum = 2; cin >> E; for(int i=1; abs(a*=2.0/(i+1))>=E;i++){ sum+=a; } cout << sum; return 0; } |
Список задач на циклы.
— Вы пишите, что [latex]2/(i+1)[/latex] это рекуррентная формула для членов ряда. Но это не так. То, что Вы нашли — отношение двух соседних членов ряда. Конечно, с его помощью можно построить рекуррентное соотношение вида [latex]a_{i+1}=\frac{2}{i+1}\cdot a_i[/latex], для [latex]i>1[/latex] и [latex]a_1=2[/latex]. Кстати, в программе Вы так и сделали.
— Забыли добавить ключевые слова (tags) .
— Забыли сделать тесты. Собственно, сойдёт и один тест — просто вычислите сумму ряда, например, в wolframalpha.com и опубликуйте результат и ссылку.
Исправил неточности в объяснении, добавил теги.
В качестве проверки на wolframalpha.com я слегка изменил код — установил фиксировнную точность, равную 0.000001 и после суммы сделал вывод количества элементов. Ссылка на код. Если на wolframalpha.com найти значение данной суммы от первого до 12-го члена, то оно будет равно 6.3890545…, что близко к вычислениям моей программы.
Хорошо.
Можно было считать сумму так.
Так почему Вы не хотите сделать тест и включить эталонный ответ в публикацию?