code 49999;
real procedure ANDERSON DARLING(X, L, U, SORTED);
value L, U, SORTED;
array X; integer L, U; Boolean SORTED;
begin integer I, N;
    real MU, SIGMA, XI, FACTOR, SUM, ESTIMATE;

    N:= U - L +1;
    if N ≤ 1 then
        STATAL3 ERROR(“ANDERSON-DARLING”, 3, U);
    if ¬ SORTED then VECQSORT(X, L, U);
    if X[L] = X[U] then
    STATAL3 ERROR(“ANDERSON-DARLING”, 1, X[L]);

    comment FIRST THE ESTIMATION (IN THE USUAL WAY) OF
        EXPECTATION AND STANDARD DEVIATION OF THE NORMAL
        DISTRIBUTION. ;
    MU:= SIGMA:= 0; ESTIMATE:= (X[L] + X[U]) / 2;
    for I:= L step 1 until U do
    begin XI:= X[I]:= X[I] - ESTIMATE;
        MU:= MU + XI; SIGMA:= SIGMA + XI × XI;
    end;
    MU:= MU / N;
    SIGMA:= SQRT((SIGMA - N × MU × MU) / (N - 1));

    comment TRANSFORMATION OF THE OBSERVATIONS TO
              UNIFORM(0, 1)-DISTRIBUTED QUANTITIES.;
    for I:= L step 1 until U do
    X[I]:=PHI((X[I] - MU) / SIGMA);

    comment ANDERSON-DARLING TEST QUANTITY;

    SUM:= 0; FACTOR:= -1;
    for I:= L step 1 until U do
    begin FACTOR:= FACTOR + 2;
        SUM:= SUM +
              FACTOR × (LN(X[I]) + LN(1 - X[L + U - I]))
    end;
    ANDERSON DARLING:=
        (1 + 4 / N - 25 / N / N) × (-SUM / N - N)
end OF ANDERSON DARLING;
eop