void nprob(z,p,q,pdf) /*- C P, Q = PROBABILITIES TO THE LEFT AND RIGHT OF Z C FOR THE STANDARD NORMAL DISTRIBUTION. C PDF = THE PROBABILITY DENSITY FUNCTION C C REFERENCE: ADAMS,A.G. AREAS UNDER THE NORMAL CURVE, C ALGORITHM 39, COMPUTER J., VOL. 12, 197-8, 1969. C C LATEST REVISION - 23 JANUARY 1981 */ { static double a[8]={0.5, 0.398942280444, 0.399903438504, 5.75885480458, 29.8213557808, 2.62433121679, 48.6959930692, 5.92885724438}; static double b[12]={0.398942280385, 3.8052e-8, 1.00000615302, 3.98064794e-4, 1.98615381364, 0.151679116635, 5.29330324926, 4.8385912808, 15.1508972451, 0.742380924027, 30.789933034, 3.99019417011}; double zabs; zabs = fabs(z); IF(ZABS.GT.12.7D0) GO TO 20 Y = A0*Z*Z PDF = EXP(-Y)*B0 IF(ZABS.GT.1.28D0) GO TO 10 C C Z BETWEEN -1.28 AND +1.28 C Q = A0-ZABS*(A1-A2*Y/(Y+A3-A4/(Y+A5+A6/(Y+A7)))) IF(Z.LT.0.D0) GO TO 30 P = 1.D0-Q RETURN C C ZABS BETWEEN 1.28 AND 12.7 C 10 Q = PDF/(ZABS-B1+B2/(ZABS+B3+B4/(ZABS-B5+B6/(ZABS+B7-B8/ 1 (ZABS+B9+B10/(ZABS+B11)))))) IF(Z.LT.0.D0) GO TO 30 P = 1.D0-Q RETURN C C Z FAR OUT IN TAIL C 20 Q = 0.D0 PDF = 0.D0 IF(Z.LT.0.D0) GO TO 30 P = 1.D0 RETURN C C NEGATIVE Z, INTERCHANGE P AND Q C 30 P = Q Q = 1.D0-P RETURN END