#include float nonexperfc(float x) { void errorfunction(float, float *, float *); float absx,erf,erfc,c,p,q; absx=fabs(x); if (absx <= 0.5) { errorfunction(x,&erf,&erfc); return exp(x*x)*erfc; } else if (absx < 4.0) { c=absx; p=((((((-0.136864857382717e-6*c+0.564195517478974e0)*c+ 0.721175825088309e1)*c+0.431622272220567e2)*c+ 0.152989285046940e3)*c+0.339320816734344e3)*c+ 0.451918953711873e3)*c+0.300459261020162e3; q=((((((c+0.127827273196294e2)*c+0.770001529352295e2)*c+ 0.277585444743988e3)*c+0.638980264465631e3)*c+ 0.931354094850610e3)*c+0.790950925327898e3)*c+ 0.300459260956983e3; return ((x > 0.0) ? p/q : exp(x*x)*2.0-p/q); } else { c=1.0/x/x; p=(((0.223192459734185e-1*c+0.278661308609648e0)*c+ 0.226956593539687e0)*c+0.494730910623251e-1)*c+ 0.299610707703542e-2; q=(((c+0.198733201817135e1)*c+0.105167510706793e1)*c+ 0.191308926107830e0)*c+0.106209230528468e-1; c=(c*(-p)/q+0.564189583547756)/absx; return ((x > 0.0) ? c : exp(x*x)*2.0-c); } }