picomath

Pascal

erf.pas

unit erf;

interface

uses math;

function erf(x: float): float;

implementation

function erf(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);

    { 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);

    erf := sign*y;
end;

end.