logo search
1_1 (1)

8.Вопрос точности вычислений

При реализации многих численных методов точность вычислений зависит от числа шагов. Однако за какое именно число шагов будет достигнута приемлемая точность, заранее сказать трудно и желательно, чтобы программа сама определяла, когда следует остановиться.

Например, синус можно разложить в так называемый ряд Тейлора:

Чем большее количество членов ряда будет просуммировано, тем точнее будет вычислен синус. Пусть требуется вычислить до 5-го знака после запятой. То есть приемлемая погрешность . Для этого достаточно суммировать члены ряда до тех пор, пока очередной член ряда не окажется меньше 10-5.

  eps:=1e-5;

  readln(x);

  p:=x;

  s:=x;

  n:=2;

  while abs(p)>eps do {Условие выхода: очередной член ряда по модулю меньше eps}

begin

    p:=-p*x*x/(n*(n+1)); {Вычисление очередного члена ряда}

    s:=s+p;

    n:=n+2;

  end;

  writeln('sin(x) = ', s);

Если вычисления производятся в соответствии с рекуррентными соотношениями, то еще один способ поставить связанное с точностью условие прекращения вычислений заключается в следующем. Вычисления прекращаются, если изменение вычисляемой величины на очередном шаге меньше заданной величины:

Также условие можно наложить на относительное изменение: