code 34423;
procedure DECTRI(SUB, DIAG, SUPER, N, AUX);
value N; integer N; array SUB, DIAG, SUPER, AUX;
begin integer I, N1;
real D, R, S, U, NORM, NORM1, TOL;
TOL:= AUX[2]; D:= DIAG[1]; R:= SUPER[1];
NORM:= NORM1:= ABS(D) + ABS(R);
if ABS(D) <= NORM1 * TOL then
begin AUX[3]:= 0; AUX[5]:= D; goto EXIT end;
U:= SUPER[1]:= R / D; S:= SUB[1]; N1:= N - 1;
for I:= 2 step 1 until N1 do
begin D:= DIAG[I]; R:= SUPER[I];
NORM1:= ABS(S) + ABS(D) + ABS(R);
D:= DIAG[I]:= D - U * S;
if ABS(D) <= NORM1 * TOL then
begin AUX[3]:= I - 1; AUX[5]:= D; goto EXIT end;
U:= SUPER[I]:= R / D; S:= SUB[I];
if NORM1 > NORM then NORM:= NORM1
end;
D:= DIAG[N]; NORM1:= ABS(D) + ABS(S);
D:= DIAG[N]:= D - U * S;
if ABS(D) <= NORM1 * TOL then
begin AUX[3]:= N1; AUX[5]:= D; goto EXIT end;
if NORM1 > NORM then NORM:= NORM1;
AUX[3]:= N; AUX[5]:= NORM;
EXIT:
end DECTRI
eop