Задача
Вычислить бесконечную сумму с заданной точностью $ \varepsilon \left(\varepsilon > 0\right) $. Считать, что требуемая точность достигнута, если очередное слагаемое оказалось по модулю меньше, чем $ \varepsilon $.
$$\sum_{i = 1}^\infty \frac{1}{i ^ 2}$$
Входные данные
Точность $ \varepsilon $.
Выходные данные
Бесконечная сумма с заданной точностью $ \varepsilon $.
Тесты
№ | Входные данные | Выходные данные |
1 | 0.0000000000000045 | 1.6449339997656687 |
2 | 0.45 | 1 |
3 | 0.123123 | 1.25 |
4 | 1e-9 | 1.6449024437950241 |
Код программы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
class Test { static function main() { var eps = 1e-9; if(eps <= 0) { trace("loop will be infinite"); } else { var i = 1, ans = 0.0, cur = 1.0; while(cur > eps) { ans += cur; i++; cur = 1.0 / (i * i); } trace(ans); } } } |
Решение
На каждом шаге текущее слагаемое равно $ \frac{1}{i^2} $. Пока оно не меньше заданной точности, прибавляем к ответу.
Если заданная точность отрицательна либо равна нулю, цикл станет бесконечным, потому что $ \frac{1}{i^2} > 0, \forall i > 0 $.
Реальная же сумма ряда равна $\frac{\pi^2}{6}$, что в десятичном приближении представляет собой число 1.64493406684822643647241516664602518921894990120679843773555…
Хорошо. Только поставьте какое-нибудь разумное эпсилон. Например, 1e-9.
И укажите реальную сумму ряда.