procedure RATINT(XA, YA: array of real; N:integer; X:REAL; VAR Y, DY:real); const TINY=1E-25; var C,D:array[0..10] of real; I,NS,M:integer; HH,H,DD,DX,W,T:real; begin NS:=1; HH:=Abs(X - XA[1]); For I:=1 To N do begin H:=Abs(X - XA[I]); If H = 0 Then begin Y:=YA[I]; DY:=0; Exit; end Else If H < HH Then begin NS:=I; HH:=H; end; C[I]:=YA[I]; D[I]:=YA[I] + TINY; end; Y:=YA[NS]; NS:=NS - 1; For M:=1 To N - 1 do begin For I:=1 To N - M do begin W:=C[I + 1] - D[I]; H:=XA[I + M] - X; T:=(XA[I] - X) * D[I] / H; DD:=T - C[I + 1]; If DD = 0 Then begin ShowMessage('PAUSE'); Exit; end; DD:=W / DD; D[I]:=C[I + 1] * DD; C[I]:=T * DD; end; If 2 * NS < N - M Then DY:=C[NS + 1] Else begin DY:=D[NS]; NS:=NS - 1; end; Y:=Y + DY; end; end;