Кто может объяснить про точность

Код

program dz_func;
var list_value: array[1..10] of real;
var min,max,value_,interval,eps,sum,f,n,k: real;
var i,j: integer;
begin
  writeln('Введите минимальную границу: ');
  readln(min);
  writeln('Введите максимальную границу: ');
  readln(max);
  interval := (max-min)/9;
  list_value[1] := min;
  for i:=2 to 10 do begin
    value_ := (min + interval);
    list_value[i] := value_;
    min := value_;
  end;
  
  for i:=1 to 10 do begin
    eps:=1;
    writeln('------------------------');
    //writeln(list_value[i]);
    for j:=1 to 6 do begin
      sum:=list_value[i]; f:=list_value[i];
      eps := eps/10;k:=2;
      //write('      ',eps);
      while abs((sum-f)-sum) >= eps do begin
        writeln('Точность ',eps);
        f := k * power(f,k);
        writeln(f);
        sum := sum + f;
        writeln('Сумма ',sum);
        k := k + 1;
      end;
      write('            ',sum);
    end;
  end;
 
end.

Я не понимаю с чем сравнивать точность чтобы алгоритм работал. Вот условие: Напишите программу вычисления приближенных значений функции, представленной в виде ряда, в десяти равноотстоящих друг от друга точках указанного диапазона возможных значений аргумента. Конкретную функцию каждый студент берет из приведенного ниже перечня, при этом номер функции равен порядковому номеру студента в списке группы. Для каждого значения аргумента выполняйте вычисления до достижения каждой из заданных границ точности и одновременно считайте соответствующее число итераций. Вот функция


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

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

У вас есть функция

 target := x / Sqr(1-x);

значение которой вы можете вычислить непосредственно, подставляя x = list_value[i]; . Вот с этим значением и нужно сравнивать частичные суммы ряда, пока отличие не будет укладываться в заданную погрешность - она у вас не указана, обычно берут малую величину eps = 1e-6, 1e-10 или что-то подобное.

Что имеется в виду под каждой из заданных границ точности? - может, еще какие-то условия не приведены?

var
  x, xx, step, eps, target, sum: Double;
  i, k, ieps: integer;
begin
  step := (0.25 + 0.7) / 9;
  for i := 0 to 9 do begin
    x := -0.7 + i * step;
    target := x / sqr(1 - x);
    eps := 0.1;
    for ieps := 1 to 6 do begin
      sum := 0;
      k := 0;
      xx := 1;
      while abs(sum - target) > eps do begin
        inc(k);
        xx := xx * x;
        sum := sum + k * xx;
      end;
      Memo1.Lines.Add(Format('x %5.3f eps %8.6f sum %10.8f iter %d', [x, eps, k]));
      eps := eps * 0.1;
    end;
  end;

x -0.700 eps 0.100000 sum -0.33656518 iter 11
x -0.700 eps 0.010000 sum -0.25140859 iter 19
x -0.700 eps 0.001000 sum -0.24296102 iter 27
x -0.700 eps 0.000100 sum -0.24213746 iter 34
x -0.700 eps 0.000010 sum -0.24222216 iter 41
x -0.700 eps 0.000001 sum -0.24221380 iter 48
x -0.594 eps 0.100000 sum -0.30840966 iter 7
x -0.594 eps 0.010000 sum -0.22466060 iter 12
x -0.594 eps 0.001000 sum -0.23477551 iter 17
x -0.594 eps 0.000100 sum -0.23373535 iter 22
x -0.594 eps 0.000010 sum -0.23383403 iter 27
x -0.594 eps 0.000001 sum -0.23382511 iter 32
x -0.489 eps 0.100000 sum -0.13290803 iter 4
...
x 0.250 eps 0.000100 sum 0.44439697 iter 8
x 0.250 eps 0.000010 sum 0.44444084 iter 10
x 0.250 eps 0.000001 sum 0.44444346 iter 11
→ Ссылка