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