function PHINV(P) ! ! ALGORITHM AS241 APPL. STATIST. (1988) VOL. 37, NO. 3 ! ! Produces the normal deviate Z corresponding to a given lower ! tail area of P. ! ! Author: 22 Mar 2004 R. Jones (translated from f95 of A. Gentz) implicit double precision (a-h,k-l,o-z) parameter( SPLIT1 = 0.425d0, SPLIT2 = 5d0, & CONST1 = 0.180625d0, CONST2 = 1.6d0) ! ! Coefficients for P close to 0.5 ! parameter( & A0 = 3.3871328727963666080d00, & A1 = 1.3314166789178437745d+2, & A2 = 1.9715909503065514427d+3, & A3 = 1.3731693765509461125d+4, & A4 = 4.5921953931549871457d+4, & A5 = 6.7265770927008700853d+4, & A6 = 3.3430575583588128105d+4, & A7 = 2.5090809287301226727d+3, & B1 = 4.2313330701600911252d+1, & B2 = 6.8718700749205790830d+2, & B3 = 5.3941960214247511077d+3, & B4 = 2.1213794301586595867d+4, & B5 = 3.9307895800092710610d+4, & B6 = 2.8729085735721942674d+4, & B7 = 5.2264952788528545610d+3 ) ! ! Coefficients for P not close to 0, 0.5 or 1. ! parameter( & C0 = 1.42343711074968357734d0, & C1 = 4.63033784615654529590d0, & C2 = 5.76949722146069140550d0, & C3 = 3.64784832476320460504d0, & C4 = 1.27045825245236838258d0, & C5 = 2.41780725177450611770d-1, & C6 = 2.27238449892691845833d-2, & C7 = 7.74545014278341407640d-4, & D1 = 2.05319162663775882187d0, & D2 = 1.67638483018380384940d0, & D3 = 6.89767334985100004550d-1, & D4 = 1.48103976427480074590d-1, & D5 = 1.51986665636164571966d-2, & D6 = 5.47593808499534494600d-4, & D7 = 1.05075007164441684324d-9 ) ! ! Coefficients for P near 0 or 1. ! parameter( & E0 = 6.65790464350110377720d0, & E1 = 5.46378491116411436990d0, & E2 = 1.78482653991729133580d0, & E3 = 2.96560571828504891230d-1, & E4 = 2.65321895265761230930d-2, & E5 = 1.24266094738807843860d-3, & E6 = 2.71155556874348757815d-5, & E7 = 2.01033439929228813265d-7, & F1 = 5.99832206555887937690d-1, & F2 = 1.36929880922735805310d-1, & F3 = 1.48753612908506148525d-2, & F4 = 7.86869131145613259100d-4, & F5 = 1.84631831751005468180d-5, & F6 = 1.42151175831644588870d-7, & F7 = 2.04426310338993978564d-15 ) ! Q = ( 2*P - 1 )/2 IF ( ABS(Q) .le. SPLIT1 ) THEN R = CONST1 - Q*Q PHINV = Q*( ( ( ((((A7*R + A6)*R + A5)*R + A4)*R + A3) & *R + A2 )*R + A1 )*R + A0 ) & /( ( ( ((((B7*R + B6)*R + B5)*R + B4)*R + B3) & *R + B2 )*R + B1 )*R + 1 ) ELSE R = MIN( P, 1 - P ) IF ( R .gt. 0d0 ) THEN R = SQRT( -LOG(R) ) IF ( R .le. SPLIT2 ) THEN R = R - CONST2 PHINV = ( ( ( ((((C7*R + C6)*R + C5)*R + C4)*R + C3) & *R + C2 )*R + C1 )*R + C0 ) & /( ( ( ((((D7*R + D6)*R + D5)*R + D4)*R + D3) & *R + D2 )*R + D1 )*R + 1 ) ELSE R = R - SPLIT2 PHINV = ( ( ( ((((E7*R + E6)*R + E5)*R + E4)*R + E3) & *R + E2 )*R + E1 )*R + E0 ) & /( ( ( ((((F7*R + F6)*R + F5)*R + F4)*R + F3) & *R + F2 )*R + F1 )*R + 1 ) END IF ELSE PHINV = 9 END IF IF ( Q .lt. 0d0 ) THEN PHINV = - PHINV END IF END IF ! RETURN end