code 41501;
real procedure PHINV(PROB); value PROB; real PROB;
begin real EPS;
real procedure INVERF(X); value X; real X;
begin real ABSX, P, BETAX;
real array A[0 : 23];
real procedure CHEPOLSER(N, X, A);
value N, X; integer N; real X; array A;
begin integer K; real H, R, S, TX;
TX:= X + X; R:= A[N];
H:= A[N - 1] + R × TX;
for K:= N - 2 step -1 until 1 do
begin S:= R; R:= H;
H:= A[K] + R × TX - S
end;
CHEPOLSER:= A[0]- R + H × X
end CHEPOLSER;
ABSX:= ABS(X);
if ABSX ≤ 0.8 then
begin
A[ 0]:= 0.99288 53766 1894;
A[ 1]:= 0.12046 75161 4310;
A[ 2]:= 0.01607 81993 4210;
A[ 3]:= 0.00268 67044 3716;
A[ 4]:= 0.00049 96347 3024;
A[ 5]:= 0.00009 88982 1860;
A[ 6]:= 0.00002 03918 1276;
A[ 7]:= 0.00000 43272 7162;
A[ 8]:= 0.00000 09380 8141;
A[ 9]:= 0.00000 02067 3472;
A[10]:= 0.00000 00461 5970;
A[11]:= 0.00000 00104 1668;
A[12]:= 0.00000 00023 7150;
A[13]:= 0.00000 00005 4393;
A[14]:= 0.00000 00001 2555;
A[15]:= 0.00000 00000 2914;
A[16]:= 0.00000 00000 0680;
A[17]:= 0.00000 00000 0159;
A[18]:= 0.00000 00000 0037;
A[19]:= 0.00000 00000 0009;
A[20]:= 0.00000 00000 0002;
A[21]:= 0.00000 00000 0001;
INVERF:= CHEPOLSER(21, X × X / 0.32 - 1, A) × X
end else
if 1 - ABSX ≥ 2510-4 then
begin
A[ 0]:= 0.91215 88034 1755;
A[ 1]:= -0.01626 62818 6766;
A[ 2]:= 0.00043 35564 7295;
A[ 3]:= 0.00021 44385 7007;
A[ 4]:= 0.00000 26257 5108;
A[ 5]:= -0.00000 30210 9105;
A[ 6]:= -0.00000 00124 0606;
A[ 7]:= 0.00000 00624 0661;
A[ 8]:= -0.00000 00005 4015;
A[ 9]:= -0.00000 00014 2321;
A[10]:= 0.00000 00000 3438;
A[11]:= 0.00000 00000 3358;
A[12]:= -0.00000 00000 0146;
A[13]:= -0.00000 00000 0081;
A[14]:= 0.00000 00000 0005;
A[15]:= 0.00000 00000 0002;
BETAX:= SQRT(- LN((1 + ABSX) × (1 - ABSX)));
P:= -1.54881 30423 7326 × BETAX +
2.56549 01231 4782;
P:= CHEPOLSER(15, P, A);
INVERF:= if X < 0 then - BETAX × P
else BETAX × P
end else
begin
A[ 0]:= 0.95667 97090 2049;
A[ 1]:= -0.02310 70043 0907;
A[ 2]:= -0.00437 42360 9751;
A[ 3]:= -0.00057 65034 2265;
A[ 4]:= -0.00001 09610 2231;
A[ 5]:= 0.00002 51085 4703;
A[ 6]:= 0.00001 05623 3607;
A[ 7]:= 0.00000 27544 1233;
A[ 8]:= 0.00000 04324 8450;
A[ 9]:= -0.00000 00205 3034;
A[10]:= -0.00000 00438 9154;
A[11]:= -0.00000 00176 8401;
A[12]:= -0.00000 00039 9129;
A[13]:= -0.00000 00001 8693;
A[14]:= 0.00000 00002 7292;
A[15]:= 0.00000 00001 3282;
A[16]:= 0.00000 00000 3183;
A[17]:= 0.00000 00000 0167;
A[18]:= -0.00000 00000 0204;
A[19]:= -0.00000 00000 0097;
A[20]:= -0.00000 00000 0022;
A[21]:= -0.00000 00000 0001;
A[22]:= 0.00000 00000 0001;
A[23]:= 0.00000 00000 0001;
BETAX:= SQRT(- LN((1 + ABSX) × (1 - ABSX)));
P:= -0.55945 76313 29832 × BETAX +
2.28791 57162 6336;
P:= CHEPOLSER(23, P, A);
INVERF:= if X < 0 then - BETAX × P
else BETAX × P
end
end INVERSE ERROR FUNCTION;
EPS:= 10-14;
if PROB < EPS ∨ 1 - PROB < EPS then
STATAL3 ERROR(“PHINV”, 1, PROB);
PHINV:= INVERF(2 × PROB - 1) × 1.41421356237310
end PHINV;
eop