code 41533;
real procedure NCSTUDENT(X, DF, DELTA);
value X, DF, DELTA; real X, DF, DELTA;
begin real A, B, A2, WB, D2, TOL, TOLI, H, HELP, RESULT;
Boolean DFEVEN;
real procedure INTEGRATE(Y0, Y4, F0, F2, F4);
value Y0, Y4, F0, F2, F4; real Y0, Y4, F0, F2, F4;
begin real F1, F3, Y2, TEE, Y;
Y2:=(Y0 + Y4)/2;
Y :=(Y0 + Y2)/2; F1:= EXP(H×(1 + Y×Y))/(1 + Y×Y);
Y :=(Y2 + Y4)/2; F3:= EXP(H×(1 + Y×Y))/(1 + Y×Y);
TEE:=6×F2 - 4×(F1 + F3) + F0 + F4;
INTEGRATE:=if ABS(TEE) < TOLI
then (Y4 - Y0)×(4×(F1 + F3) + 2×F2 +
F0 + F4 - TEE/15)
else INTEGRATE(Y0, Y2, F0, F1, F2) +
INTEGRATE(Y2, Y4, F2, F3, F4);
end INTEGRATE;
real procedure SUMMATION OF FACTORS M;
begin integer I;
real MSUM, COEF, MIMIN2, MIMIN1, MI;
Boolean ADD;
MSUM:= 0;
if DF > 1 then
begin
MIMIN2:= A×WB × EXP(H) × PHI(HELP×WB) ×
.3989422804;
if DFEVEN then MSUM:= MSUM + MIMIN2;
if DF > 2 then
begin COEF:= 1;
MIMIN1:= B×(HELP×MIMIN2 +
A×.1591549431×EXP(-.5×D2));
if ¬ DFEVEN then MSUM:= MSUM + MIMIN1;
ADD:= DFEVEN;
for I:= 2 step 1 until DF - 2 do
begin MI:= (I - 1)/I×B×
(COEF×HELP×MIMIN1 + MIMIN2);
if ADD then MSUM:= MSUM + MI;
ADD:=¬ ADD; COEF:= 1/(I - 1)/COEF;
MIMIN2:= MIMIN1; MIMIN1:= MI;
end I;
end DF>2;
end DF>1;
SUMMATION OF FACTORS M:= MSUM;
end SUMMATION OF FACTORS M;
procedure INITIALISATION;
begin TOL:= 10-8;
if DF < 1 ∨ ENTIER(DF) ≠ DF then
STATAL3 ERROR(“NCSTUDENT”, 2, DF);
DFEVEN:= ENTIER(DF/2) = DF/2;
A:= X/SQRT(DF); A2:= A×A; D2:= DELTA×DELTA;
HELP:= DELTA×A;
B:=DF/(DF + X×X); WB:= SQRT(B); H:=-D2×B×.5;
if ABS(A) > TOL then TOLI:= 180 × TOL / ABS(A);
end INITIALISATION;
INITIALISATION;
RESULT :=
if DFEVEN then
PHI(-DELTA) + SUMMATION OF FACTORS M × 2.5066282746
else
PHI(-DELTA×WB) + SUMMATION OF FACTORS M × 2 +
(if ABS(A) ≤ TOL then 0 else
.31830 98862 × INTEGRATE(0, A, EXP(H),
EXP(H×(1 + A2/4))/(1 + A2/4),
EXP(H×(1 + A2))/(1 + A2)) / 12);
NCSTUDENT:=
if TOL ≤ RESULT ∧ RESULT ≤ 1 - TOL then RESULT
else
if ABS(RESULT) < TOL then 0 else
if ABS(RESULT - 1) < TOL then 1 else
STATAL3 ERROR(“NCSTUDENT”, 0, RESULT);
end NCSTUDENT;
eop