picomath

Pascal

phi.pas

unit phi;

interface

uses math;

function phi(x: float): float;

implementation

function phi(x: float): float;

{ constants }
const
    a1 =  0.254829592;
    a2 = -0.284496736;
    a3 =  1.421413741;
    a4 = -1.453152027;
    a5 =  1.061405429;
    p  =  0.3275911;

var sign: float;
    t, y: float;

begin
    { Save the sign of x }
    sign := 1;
    if x < 0 then
        sign := -1;
    x := abs(x)/sqrt(2.0);

    { A&S formula 7.1.26 }
    t := 1.0/(1.0 + p*x);
    y := 1.0 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t*exp(-x*x);

    phi := 0.5*(1.0 + sign*y);
end;

end.