code 41569; real procedure BINORCOR(R,RHO,N); value R, RHO, N; real R, RHO, N; begin real procedure SAMCORBIVNORDEN(R,RHO,N); value R, RHO, N; real R, RHO, N; begin if ABS(R) ≥ 1 then SAMCORBIVNORDEN := 0 else begin real W1, W3, Y1, Y2, Y3, Y4, N1, R2, RRHO, R2RHO2, W2, PI, RHO2; R2 := R × R; RHO2 := RHO × RHO; RRHO := R × RHO; R2RHO2 := R2 × RHO2; W1 := SQRT(1 - R2); W2 := SQRT(1 - RHO2); W3 := SQRT(1 - RHO2 × R2); PI := ARCTAN(1) × 4; N1 := N - 1; if N < 15 then begin real array SB[3:N]; integer I; SB[3] := (1-RHO2) / PI / W1 × (1 + RRHO × ARCCOS(-RRHO) / W3) / (1 - R2RHO2); if N =3 then SAMCORBIVNORDEN := SB[3] else begin SB[4] := (1 - RHO2) × W2 / PI × (3 × RRHO + (1 + 2 × R2RHO2) × ARCCOS(-RRHO) / W3) / (1 - R2RHO2) / (1 - R2RHO2); if N = 4 then SAMCORBIVNORDEN := SB[4] else begin for I := 5 step 1 until N do SB[I] := (2 × I - 5) / (I - 3) × RRHO × W1 × W2 / (1 - R2RHO2) × SB[I-1] + (I - 3) / (I - 4) × (1 - RHO2) × (1 - R2) / (1 - R2RHO2) × SB[I-2]; SAMCORBIVNORDEN := SB[N]; end; end; end else begin Y1 := (RRHO + 2) / 8; Y2 := (3 × RRHO + 2) × (3 × RRHO + 2) / 128; Y3 := (((15 × RRHO + 18) × RRHO - 4) × RRHO - 8) × 5 / 1024; Y4 := ((((3675 × RRHO + 4200) × RRHO - 2520) × RRHO - 3360) × RRHO - 336) / 32768; SAMCORBIVNORDEN := (N - 2) / SQRT(N - 1) × (1 - RHO2) × W2 × (W1 × W2 / (1 - RRHO)) ⭡ N1 × SQRT((1 - RRHO) / 2 / PI) / ((1 - R2) × W1 × (1 - RHO2) × W2) × ((((Y4 / N1 + Y3) / N1 + Y2) / N1 + Y1) / N1 + 1); end; end; end SAMCORBIVNORDEN; if ABS(RHO) ≥ 1 then STATAL3 ERROR(“BINORCOR”, 2, RHO) else if N > ENTIER(N) ∨ N < 3 then STATAL3 ERROR(“BINORCOR”, 3, N) else if R ≤ -1 then BINORCOR := 0 else if R ≥ 1 then BINORCOR := 1 else if RHO = 0 then BINORCOR := STUDENT(R × SQRT((N - 2) / (1 - R × R)), N - 2) else if N ≤ 500 then begin real W1, W2, W3, PI, R2, RHO2, RHO3, RHO4, RRHO, R2RHO2; R2 := R × R; RHO2 := RHO × RHO; RHO3 := RHO2 × RHO; RHO4 := RHO2 × RHO2; RRHO := R × RHO; R2RHO2 := R2 × RHO2; W1 := SQRT(1 - R2); W2 := SQRT(1 - RHO2); W3 := SQRT(1 - RHO2 × R2); PI := ARCTAN(1) × 4; if N = 3 then BINORCOR := (ARCCOS(-R) - RHO × W1 / W3 × ARCCOS(-RRHO)) / PI else if N = 4 then BINORCOR := W1 × W2 × SAMCORBIVNORDEN(R, RHO, 3) / RHO - (W2 / RHO - ARCCOS(RHO)) / PI else if N = 5 then BINORCOR := W1 × W2 × SAMCORBIVNORDEN(R, RHO, 4) / 2 / RHO - R × (1 - R2) / 2 × SAMCORBIVNORDENC(R, RHO, 3) - W1 × (1 + RHO2) / (2 × PI × RHO) × ARCCOS(-RRHO) / W3 + ARCCOS(-R) / PI else if N = 6 then BINORCOR := W2 × (1 - 4 × RHO2) / (3 × PI × RHO3) + ARCCOS(RHO) / PI - (1 - RHO2) × W1 × W2 / 3 / RHO3 × SAMCORBIVNORDEN(R, RHO, 3) + (1 - RHO2) × R / 3 / RHO2 × SAMCORBIVNORDEN(R, RHO, 4) + W1 × W2 / 3 / RHO × SAMCORBIVNORDEN(R, RHO, 5) else if N = 7 then BINORCOR := ARCCOS(-R) / PI - (3 + 6 × RHO2 - RHO4) × ARCCOS(-RRHO) / W3 × W1 / (8 × PI × RHO) -R × (1 - R2) × (4 - 3 × RHO2 + 3 × RHO4) / 8 / RHO2 × SAMCORBIVNORDEN(R, RHO, 3) - R2 × W1 × W2 × (2 - RHO2) / 8 / RHO × SAMCORBIVNORDEN(R, RHO, 4) + (1 - RHO2) × R / 4 / RHO2 × SAMCORBIVNORDEN(R, RHO, 5) + W1 × W2 / 4 / RHO × SAMCORBIVNORDEN(R, RHO, 6) else if N = 8 then BINORCOR := ARCCOS(RHO) / PI - W2 × (3 - 11 × RHO2 + 23 × RHO4) / 15 / PI / RHO4 / RHO + (W2 / RHO) ⭡ 5 × W1 / 5 × SAMCORBIVNORDEN(R, RHO, 3) - R × (1-RHO2) × (1-RHO2) / 5 / RHO4 × SAMCORBIVNORDEN(R, RHO, 4) + (3 × R2 - 1) × (1 - RHO2) × W2 / W1 / 15 / RHO3 × SAMCORBIVNORDEN(R, RHO, 5) + (1 - RHO2) × R / 5 / RHO2 × SAMCORBIVNORDEN(R, RHO, 6) + W1 × W2 / 5 / RHO × SAMCORBIVNORDENC(R, RHO, 7) else begin real array E[1:3]; real X; E[1] := E[2] := 10-6; BINORCOR := STUDENT(-RHO × SQRT(N - 1) / W2, N - 1) + QADRAT(X, 0, R, SAMCORBIVNORDEN(X, RHO, N), E) end; end else begin real R2, RHO2, RHO3; integer N1, N2, N3; N1 := N - 1; N2 := N1 × N1; N3 := N1 × N2; R2 := R × R; RHO2 := RHO × RHO; RHO3 := RHO2 × RHO; BINORCOR := if ABS(RHO) ≤ .7 then PHI((R × SQRT((N - 2.5) / (1 - R2)) - RHO × SQRT((N - 1.5) / (1 - RHO2))) / SQRT(1 + RHO2 / 2 / (1 - RHO2) + R2 / 2 / (1 - R2))) else PHI((.5 × LN((1 + R) × (1 - RHO) / (1 - R) / (1 + RHO)) - RHO / 2/ N1 - (5 × RHO + RHO3) / 8 / N2 - (11 × RHO + (2 + RHO2) × 3 × RHO3) / 16 / N3) / SQRT(1 / N1 + (4 - RHO2) / 2 / N2 + (22 - (6 - 3 × RHO2) × RHO2) / 6 / N3)); end; end BINORCOR; eop