```   1: /*	@(#)erf.c	4.1	12/25/82	*/
2:
3: /*
4: 	C program for floating point error function
5:
6: 	erf(x) returns the error function of its argument
7: 	erfc(x) returns 1.0-erf(x)
8:
9: 	erf(x) is defined by
10: 	\${2 over sqrt(pi)} int from 0 to x e sup {-t sup 2} dt\$
11:
12: 	the entry for erfc is provided because of the
13: 	extreme loss of relative accuracy if erf(x) is
14: 	called for large x and the result subtracted
15: 	from 1. (e.g. for x= 10, 12 places are lost).
16:
17: 	There are no error returns.
18:
19: 	Calls exp.
20:
21: 	Coefficients for large x are #5667 from Hart & Cheney (18.72D).
22: */
23:
24: #define M 7
25: #define N 9
26: int errno;
27: static double torp = 1.1283791670955125738961589031;
28: static double p1[] = {
29:     0.804373630960840172832162e5,
30:     0.740407142710151470082064e4,
31:     0.301782788536507577809226e4,
32:     0.380140318123903008244444e2,
33:     0.143383842191748205576712e2,
34:     -.288805137207594084924010e0,
35:     0.007547728033418631287834e0,
36: };
37: static double q1[]  = {
38:     0.804373630960840172826266e5,
39:     0.342165257924628539769006e5,
40:     0.637960017324428279487120e4,
41:     0.658070155459240506326937e3,
42:     0.380190713951939403753468e2,
43:     0.100000000000000000000000e1,
44:     0.0,
45: };
46: static double p2[]  = {
47:     0.18263348842295112592168999e4,
48:     0.28980293292167655611275846e4,
49:     0.2320439590251635247384768711e4,
50:     0.1143262070703886173606073338e4,
51:     0.3685196154710010637133875746e3,
52:     0.7708161730368428609781633646e2,
53:     0.9675807882987265400604202961e1,
54:     0.5641877825507397413087057563e0,
55:     0.0,
56: };
57: static double q2[]  = {
58:     0.18263348842295112595576438e4,
59:     0.495882756472114071495438422e4,
60:     0.60895424232724435504633068e4,
61:     0.4429612803883682726711528526e4,
62:     0.2094384367789539593790281779e4,
63:     0.6617361207107653469211984771e3,
64:     0.1371255960500622202878443578e3,
65:     0.1714980943627607849376131193e2,
66:     1.0,
67: };
68:
69: double
70: erf(arg) double arg;{
71:     double erfc();
72:     int sign;
73:     double argsq;
74:     double d, n;
75:     int i;
76:
77:     errno = 0;
78:     sign = 1;
79:     if(arg < 0.){
80:         arg = -arg;
81:         sign = -1;
82:     }
83:     if(arg < 0.5){
84:         argsq = arg*arg;
85:         for(n=0,d=0,i=M-1; i>=0; i--){
86:             n = n*argsq + p1[i];
87:             d = d*argsq + q1[i];
88:         }
89:         return(sign*torp*arg*n/d);
90:     }
91:     if(arg >= 10.)
92:         return(sign*1.);
93:     return(sign*(1. - erfc(arg)));
94: }
95:
96: double
97: erfc(arg) double arg;{
98:     double erf();
99:     double exp();
100:     double n, d;
101:     int i;
102:
103:     errno = 0;
104:     if(arg < 0.)
105:         return(2. - erfc(-arg));
106: /*
107: 	if(arg < 0.5)
108: 		return(1. - erf(arg));
109: */
110:     if(arg >= 10.)
111:         return(0.);
112:
113:     for(n=0,d=0,i=N-1; i>=0; i--){
114:         n = n*arg + p2[i];
115:         d = d*arg + q2[i];
116:     }
117:     return(exp(-arg*arg)*n/d);
118: }
```

Defined functions

erf defined in line 69; used 7 times
erfc defined in line 96; used 9 times

Defined variables

errno defined in line 26; used 2 times
p1 defined in line 28; used 1 times
• in line 86
p2 defined in line 46; used 1 times
q1 defined in line 37; used 1 times
• in line 87
q2 defined in line 57; used 1 times
torp defined in line 27; used 1 times
• in line 89

Defined macros

M defined in line 24; used 1 times
• in line 85
N defined in line 25; used 1 times
 Last modified: 1985-06-05 Generated: 2016-12-26 Generated by src2html V0.67 page hit count: 973