GNU Octave  3.8.0
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
derfc.f
Go to the documentation of this file.
1 *DECK DERFC
2  DOUBLE PRECISION FUNCTION derfc (X)
3 C***BEGIN PROLOGUE DERFC
4 C***PURPOSE Compute the complementary error function.
5 C***LIBRARY SLATEC (FNLIB)
6 C***CATEGORY C8A, L5A1E
7 C***TYPE DOUBLE PRECISION (ERFC-S, DERFC-D)
8 C***KEYWORDS COMPLEMENTARY ERROR FUNCTION, ERFC, FNLIB,
9 C SPECIAL FUNCTIONS
10 C***AUTHOR Fullerton, W., (LANL)
11 C***DESCRIPTION
12 C
13 C DERFC(X) calculates the double precision complementary error function
14 C for double precision argument X.
15 C
16 C Series for ERF on the interval 0. to 1.00000E+00
17 C with weighted Error 1.28E-32
18 C log weighted Error 31.89
19 C significant figures required 31.05
20 C decimal places required 32.55
21 C
22 C Series for ERC2 on the interval 2.50000E-01 to 1.00000E+00
23 C with weighted Error 2.67E-32
24 C log weighted Error 31.57
25 C significant figures required 30.31
26 C decimal places required 32.42
27 C
28 C Series for ERFC on the interval 0. to 2.50000E-01
29 C with weighted error 1.53E-31
30 C log weighted error 30.82
31 C significant figures required 29.47
32 C decimal places required 31.70
33 C
34 C***REFERENCES (NONE)
35 C***ROUTINES CALLED D1MACH, DCSEVL, INITDS, XERMSG
36 C***REVISION HISTORY (YYMMDD)
37 C 770701 DATE WRITTEN
38 C 890531 Changed all specific intrinsics to generic. (WRB)
39 C 890531 REVISION DATE from Version 3.2
40 C 891214 Prologue converted to Version 4.0 format. (BAB)
41 C 900315 CALLs to XERROR changed to CALLs to XERMSG. (THJ)
42 C 920618 Removed space from variable names. (RWC, WRB)
43 C***END PROLOGUE DERFC
44  DOUBLE PRECISION x, erfcs(21), erfccs(59), erc2cs(49), sqeps,
45  1 sqrtpi, xmax, txmax, xsml, y, d1mach, dcsevl
46  LOGICAL first
47  SAVE erfcs, erc2cs, erfccs, sqrtpi, nterf,
48  1 nterfc, nterc2, xsml, xmax, sqeps, first
49  DATA erfcs( 1) / -.4904612123 4691808039 9845440333 76 d-1 /
50  DATA erfcs( 2) / -.1422612051 0371364237 8247418996 31 d+0 /
51  DATA erfcs( 3) / +.1003558218 7599795575 7546767129 33 d-1 /
52  DATA erfcs( 4) / -.5768764699 7674847650 8270255091 67 d-3 /
53  DATA erfcs( 5) / +.2741993125 2196061034 4221607914 71 d-4 /
54  DATA erfcs( 6) / -.1104317550 7344507604 1353812959 05 d-5 /
55  DATA erfcs( 7) / +.3848875542 0345036949 9613114981 74 d-7 /
56  DATA erfcs( 8) / -.1180858253 3875466969 6317518015 81 d-8 /
57  DATA erfcs( 9) / +.3233421582 6050909646 4029309533 54 d-10 /
58  DATA erfcs( 10) / -.7991015947 0045487581 6073747085 95 d-12 /
59  DATA erfcs( 11) / +.1799072511 3961455611 9672454866 34 d-13 /
60  DATA erfcs( 12) / -.3718635487 8186926382 3168282094 93 d-15 /
61  DATA erfcs( 13) / +.7103599003 7142529711 6899083946 66 d-17 /
62  DATA erfcs( 14) / -.1261245511 9155225832 4954248533 33 d-18 /
63  DATA erfcs( 15) / +.2091640694 1769294369 1705002666 66 d-20 /
64  DATA erfcs( 16) / -.3253973102 9314072982 3641600000 00 d-22 /
65  DATA erfcs( 17) / +.4766867209 7976748332 3733333333 33 d-24 /
66  DATA erfcs( 18) / -.6598012078 2851343155 1999999999 99 d-26 /
67  DATA erfcs( 19) / +.8655011469 9637626197 3333333333 33 d-28 /
68  DATA erfcs( 20) / -.1078892517 7498064213 3333333333 33 d-29 /
69  DATA erfcs( 21) / +.1281188399 3017002666 6666666666 66 d-31 /
70  DATA erc2cs( 1) / -.6960134660 2309501127 3915082619 7 d-1 /
71  DATA erc2cs( 2) / -.4110133936 2620893489 8221208466 6 d-1 /
72  DATA erc2cs( 3) / +.3914495866 6896268815 6114370524 4 d-2 /
73  DATA erc2cs( 4) / -.4906395650 5489791612 8093545077 4 d-3 /
74  DATA erc2cs( 5) / +.7157479001 3770363807 6089414182 5 d-4 /
75  DATA erc2cs( 6) / -.1153071634 1312328338 0823284791 2 d-4 /
76  DATA erc2cs( 7) / +.1994670590 2019976350 5231486770 9 d-5 /
77  DATA erc2cs( 8) / -.3642666471 5992228739 3611843071 1 d-6 /
78  DATA erc2cs( 9) / +.6944372610 0050125899 3127721463 3 d-7 /
79  DATA erc2cs( 10) / -.1371220902 1043660195 3460514121 0 d-7 /
80  DATA erc2cs( 11) / +.2788389661 0071371319 6386034808 7 d-8 /
81  DATA erc2cs( 12) / -.5814164724 3311615518 6479105031 6 d-9 /
82  DATA erc2cs( 13) / +.1238920491 7527531811 8016881795 0 d-9 /
83  DATA erc2cs( 14) / -.2690639145 3067434323 9042493788 9 d-10 /
84  DATA erc2cs( 15) / +.5942614350 8479109824 4470968384 0 d-11 /
85  DATA erc2cs( 16) / -.1332386735 7581195792 8775442057 0 d-11 /
86  DATA erc2cs( 17) / +.3028046806 1771320171 7369724330 4 d-12 /
87  DATA erc2cs( 18) / -.6966648814 9410325887 9586758895 4 d-13 /
88  DATA erc2cs( 19) / +.1620854541 0539229698 1289322762 8 d-13 /
89  DATA erc2cs( 20) / -.3809934465 2504919998 7691305772 9 d-14 /
90  DATA erc2cs( 21) / +.9040487815 9788311493 6897101297 5 d-15 /
91  DATA erc2cs( 22) / -.2164006195 0896073478 0981204700 3 d-15 /
92  DATA erc2cs( 23) / +.5222102233 9958549846 0798024417 2 d-16 /
93  DATA erc2cs( 24) / -.1269729602 3645553363 7241552778 0 d-16 /
94  DATA erc2cs( 25) / +.3109145504 2761975838 3622741295 1 d-17 /
95  DATA erc2cs( 26) / -.7663762920 3203855240 0956671481 1 d-18 /
96  DATA erc2cs( 27) / +.1900819251 3627452025 3692973329 0 d-18 /
97  DATA erc2cs( 28) / -.4742207279 0690395452 2565599996 5 d-19 /
98  DATA erc2cs( 29) / +.1189649200 0765283828 8068307845 1 d-19 /
99  DATA erc2cs( 30) / -.3000035590 3257802568 4527131306 6 d-20 /
100  DATA erc2cs( 31) / +.7602993453 0432461730 1938527709 8 d-21 /
101  DATA erc2cs( 32) / -.1935909447 6068728815 6981104913 0 d-21 /
102  DATA erc2cs( 33) / +.4951399124 7733378810 0004238677 3 d-22 /
103  DATA erc2cs( 34) / -.1271807481 3363718796 0862198988 8 d-22 /
104  DATA erc2cs( 35) / +.3280049600 4695130433 1584165205 3 d-23 /
105  DATA erc2cs( 36) / -.8492320176 8228965689 2479242239 9 d-24 /
106  DATA erc2cs( 37) / +.2206917892 8075602235 1987998719 9 d-24 /
107  DATA erc2cs( 38) / -.5755617245 6965284983 1281950719 9 d-25 /
108  DATA erc2cs( 39) / +.1506191533 6392342503 5414405119 9 d-25 /
109  DATA erc2cs( 40) / -.3954502959 0187969531 0428569599 9 d-26 /
110  DATA erc2cs( 41) / +.1041529704 1515009799 8464505173 3 d-26 /
111  DATA erc2cs( 42) / -.2751487795 2787650794 5017890133 3 d-27 /
112  DATA erc2cs( 43) / +.7290058205 4975574089 9770368000 0 d-28 /
113  DATA erc2cs( 44) / -.1936939645 9159478040 7750109866 6 d-28 /
114  DATA erc2cs( 45) / +.5160357112 0514872983 7005482666 6 d-29 /
115  DATA erc2cs( 46) / -.1378419322 1930940993 8964480000 0 d-29 /
116  DATA erc2cs( 47) / +.3691326793 1070690422 5109333333 3 d-30 /
117  DATA erc2cs( 48) / -.9909389590 6243654206 5322666666 6 d-31 /
118  DATA erc2cs( 49) / +.2666491705 1953884133 2394666666 6 d-31 /
119  DATA erfccs( 1) / +.7151793102 0292477450 3697709496 d-1 /
120  DATA erfccs( 2) / -.2653243433 7606715755 8893386681 d-1 /
121  DATA erfccs( 3) / +.1711153977 9208558833 2699194606 d-2 /
122  DATA erfccs( 4) / -.1637516634 5851788416 3746404749 d-3 /
123  DATA erfccs( 5) / +.1987129350 0552036499 5974806758 d-4 /
124  DATA erfccs( 6) / -.2843712412 7665550875 0175183152 d-5 /
125  DATA erfccs( 7) / +.4606161308 9631303696 9379968464 d-6 /
126  DATA erfccs( 8) / -.8227753025 8792084205 7766536366 d-7 /
127  DATA erfccs( 9) / +.1592141872 7709011298 9358340826 d-7 /
128  DATA erfccs( 10) / -.3295071362 2528432148 6631665072 d-8 /
129  DATA erfccs( 11) / +.7223439760 4005554658 1261153890 d-9 /
130  DATA erfccs( 12) / -.1664855813 3987295934 4695966886 d-9 /
131  DATA erfccs( 13) / +.4010392588 2376648207 7671768814 d-10 /
132  DATA erfccs( 14) / -.1004816214 4257311327 2170176283 d-10 /
133  DATA erfccs( 15) / +.2608275913 3003338085 9341009439 d-11 /
134  DATA erfccs( 16) / -.6991110560 4040248655 7697812476 d-12 /
135  DATA erfccs( 17) / +.1929492333 2617070862 4205749803 d-12 /
136  DATA erfccs( 18) / -.5470131188 7543310649 0125085271 d-13 /
137  DATA erfccs( 19) / +.1589663309 7626974483 9084032762 d-13 /
138  DATA erfccs( 20) / -.4726893980 1975548392 0369584290 d-14 /
139  DATA erfccs( 21) / +.1435873376 7849847867 2873997840 d-14 /
140  DATA erfccs( 22) / -.4449510561 8173583941 7250062829 d-15 /
141  DATA erfccs( 23) / +.1404810884 7682334373 7305537466 d-15 /
142  DATA erfccs( 24) / -.4513818387 7642108962 5963281623 d-16 /
143  DATA erfccs( 25) / +.1474521541 0451330778 7018713262 d-16 /
144  DATA erfccs( 26) / -.4892621406 9457761543 6841552532 d-17 /
145  DATA erfccs( 27) / +.1647612141 4106467389 5301522827 d-17 /
146  DATA erfccs( 28) / -.5626817176 3294080929 9928521323 d-18 /
147  DATA erfccs( 29) / +.1947443382 2320785142 9197867821 d-18 /
148  DATA erfccs( 30) / -.6826305642 9484207295 6664144723 d-19 /
149  DATA erfccs( 31) / +.2421988887 2986492401 8301125438 d-19 /
150  DATA erfccs( 32) / -.8693414133 5030704256 3800861857 d-20 /
151  DATA erfccs( 33) / +.3155180346 2280855712 2363401262 d-20 /
152  DATA erfccs( 34) / -.1157372324 0496087426 1239486742 d-20 /
153  DATA erfccs( 35) / +.4288947161 6056539462 3737097442 d-21 /
154  DATA erfccs( 36) / -.1605030742 0576168500 5737770964 d-21 /
155  DATA erfccs( 37) / +.6063298757 4538026449 5069923027 d-22 /
156  DATA erfccs( 38) / -.2311404251 6979584909 8840801367 d-22 /
157  DATA erfccs( 39) / +.8888778540 6618855255 4702955697 d-23 /
158  DATA erfccs( 40) / -.3447260576 6513765223 0718495566 d-23 /
159  DATA erfccs( 41) / +.1347865460 2069650682 7582774181 d-23 /
160  DATA erfccs( 42) / -.5311794071 1250217364 5873201807 d-24 /
161  DATA erfccs( 43) / +.2109341058 6197831682 8954734537 d-24 /
162  DATA erfccs( 44) / -.8438365587 9237891159 8133256738 d-25 /
163  DATA erfccs( 45) / +.3399982524 9452089062 7359576337 d-25 /
164  DATA erfccs( 46) / -.1379452388 0732420900 2238377110 d-25 /
165  DATA erfccs( 47) / +.5634490311 8332526151 3392634811 d-26 /
166  DATA erfccs( 48) / -.2316490434 4770654482 3427752700 d-26 /
167  DATA erfccs( 49) / +.9584462844 6018101526 3158381226 d-27 /
168  DATA erfccs( 50) / -.3990722880 3301097262 4224850193 d-27 /
169  DATA erfccs( 51) / +.1672129225 9444773601 7228709669 d-27 /
170  DATA erfccs( 52) / -.7045991522 7660138563 8803782587 d-28 /
171  DATA erfccs( 53) / +.2979768402 8642063541 2357989444 d-28 /
172  DATA erfccs( 54) / -.1262522466 4606192972 2422632994 d-28 /
173  DATA erfccs( 55) / +.5395438704 5424879398 5299653154 d-29 /
174  DATA erfccs( 56) / -.2380992882 5314591867 5346190062 d-29 /
175  DATA erfccs( 57) / +.1099052830 1027615735 9726683750 d-29 /
176  DATA erfccs( 58) / -.4867713741 6449657273 2518677435 d-30 /
177  DATA erfccs( 59) / +.1525877264 1103575676 3200828211 d-30 /
178  DATA sqrtpi / 1.772453850 9055160272 9816748334 115d0 /
179  DATA first /.true./
180 C***FIRST EXECUTABLE STATEMENT DERFC
181  IF (first) THEN
182  eta = 0.1*REAL(d1mach(3))
183  nterf = initds(erfcs, 21, eta)
184  nterfc = initds(erfccs, 59, eta)
185  nterc2 = initds(erc2cs, 49, eta)
186 C
187  xsml = -sqrt(-log(sqrtpi*d1mach(3)))
188  txmax = sqrt(-log(sqrtpi*d1mach(1)))
189  xmax = txmax - 0.5d0*log(txmax)/txmax - 0.01d0
190  sqeps = sqrt(2.0d0*d1mach(3))
191  ENDIF
192  first = .false.
193 C
194  IF (isnan(x)) THEN
195  derfc = x
196  RETURN
197  ENDIF
198 C
199  IF (x.GT.xsml) go to 20
200 C
201 C ERFC(X) = 1.0 - ERF(X) FOR X .LT. XSML
202 C
203  derfc = 2.0d0
204  RETURN
205 C
206  20 IF (x.GT.xmax) go to 40
207  y = abs(x)
208  IF (y.GT.1.0d0) go to 30
209 C
210 C ERFC(X) = 1.0 - ERF(X) FOR ABS(X) .LE. 1.0
211 C
212  IF (y.LT.sqeps) derfc = 1.0d0 - 2.0d0*x/sqrtpi
213  IF (y.GE.sqeps) derfc = 1.0d0 - x*(1.0d0 + dcsevl(2.d0*x*x-1.d0,
214  1 erfcs, nterf))
215  RETURN
216 C
217 C ERFC(X) = 1.0 - ERF(X) FOR 1.0 .LT. ABS(X) .LE. XMAX
218 C
219  30 y = y*y
220  IF (y.LE.4.d0) derfc = exp(-y)/abs(x) * (0.5d0 + dcsevl(
221  1 (8.d0/y-5.d0)/3.d0, erc2cs, nterc2) )
222  IF (y.GT.4.d0) derfc = exp(-y)/abs(x) * (0.5d0 + dcsevl(
223  1 8.d0/y-1.d0, erfccs, nterfc) )
224  IF (x.LT.0.d0) derfc = 2.0d0 - derfc
225  RETURN
226 C
227  40 derfc = 0.d0
228  RETURN
229 C
230  END