Примем, что требуемая точность ε достигнута, если очередное слагаемое по модулю не превышает этого ε.
Обратим внимание что в выражении имеется операция возведения в степень, которая в Паскале выполняется с использованием тождества
, вносящего существенную погрешность. В то же время, запрошенная точность ε=10⁻³ невысока, что позволяет не озадачиваться более точными методами вычисления степени, такими, как многократное умножение.
Итог: алгоритм вычисления - цикл с накоплением суммы и выходом по выполнению условия достижения заданной точности.
// PascalABC.NET 3.3, сборка 1590 от 03.12.2017
// Внимание! Если программа не работает, обновите версию!
begin
var x:=readReal('Введите x:');
var (s,eps,k):=(0.0,1e-3,1);
while true do begin
var xk:=Power(x,k);
var xs:=xk*xk*Sin(xk)/(k*k);
s+=xs; k+=1;
if (Abs(xs)<=eps) or (Abs(xs)>=MaxReal) then break
end;
Writeln('S=',s)
end.
Примеры
Введите x: -2.5
S=-бесконечность
Введите x: -1
S=-0.69163022624612
Введите x: 0.173
S=0.00515862949420988
Введите x: 2
S=бесконечность