home *** CD-ROM | disk | FTP | other *** search
- (*-------------------------------------------------------------------------*)
- (* Ninv -- Find Percentage Point of Normal Distribution *)
- (*-------------------------------------------------------------------------*)
-
- FUNCTION Ninv( P : REAL ) : REAL;
-
- (*-------------------------------------------------------------------------*)
- (* *)
- (* Function: Ninv *)
- (* *)
- (* Purpose: Finds percentage point of normal distribution *)
- (* (low accuracy) *)
- (* *)
- (* Calling Sequence: *)
- (* *)
- (* Perc := Ninv( P : REAL ) : REAL; *)
- (* *)
- (* P --- input probability *)
- (* Perc --- resultant percentage point *)
- (* *)
- (* Calls: None *)
- (* *)
- (* Remark: This method provides about 6.5 decimal digits of *)
- (* accuracy. *)
- (* *)
- (*-------------------------------------------------------------------------*)
-
- CONST
- Lim = 1.0E-20;
-
- VAR
- Y: REAL;
- Pr: REAL;
- Nv: REAL;
-
- (* Structured *) CONST
-
- PN: ARRAY[1..5] OF REAL =
- ( -0.322232431088 ,
- -1.0 ,
- -0.342242088547 ,
- -0.0204231210245 ,
- -0.453642210148E-4 );
-
- QN: ARRAY[1..5] OF REAL =
- ( 0.0993484626060 ,
- 0.588581570495 ,
- 0.531103462366 ,
- 0.103537752850 ,
- 0.38560700634E-2 );
-
- BEGIN (* Ninv *)
-
- Ninv := 0.0;
-
- IF( P > 0.5 ) THEN
- Pr := 1.0 - P
- ELSE
- Pr := P;
-
- IF( ( Pr >= Lim ) AND ( Pr <> 0.5 ) ) THEN
-
- BEGIN
-
- Y := SQRT ( LN( 1.0 / Pr / Pr ) );
-
- Nv := Y + ((((Y * PN[ 5 ] + PN[ 4 ]) * Y + PN[ 3 ] ) * Y
- + PN[ 2 ]) * Y + PN[ 1 ] ) /
- ((((Y * QN[ 5 ] + QN[ 4 ]) * Y + QN[ 3 ] ) * Y
- + QN[ 2 ]) * Y + QN[ 1 ] );
-
- IF( P < 0.5 ) THEN
- Ninv := -Nv
- ELSE
- Ninv := Nv;
-
- END;
-
- END (* Ninv *);