1*DECK DERF 2 DOUBLE PRECISION FUNCTION DERF (X) 3C***BEGIN PROLOGUE DERF 4C***PURPOSE Compute the error function. 5C***LIBRARY SLATEC (FNLIB) 6C***CATEGORY C8A, L5A1E 7C***TYPE DOUBLE PRECISION (ERF-S, DERF-D) 8C***KEYWORDS ERF, ERROR FUNCTION, FNLIB, SPECIAL FUNCTIONS 9C***AUTHOR Fullerton, W., (LANL) 10C***DESCRIPTION 11C 12C DERF(X) calculates the double precision error function for double 13C precision argument X. 14C 15C Series for ERF on the interval 0. to 1.00000E+00 16C with weighted error 1.28E-32 17C log weighted error 31.89 18C significant figures required 31.05 19C decimal places required 32.55 20C 21C***REFERENCES (NONE) 22C***ROUTINES CALLED D1MACH, DCSEVL, DERFC, INITDS 23C***REVISION HISTORY (YYMMDD) 24C 770701 DATE WRITTEN 25C 890531 Changed all specific intrinsics to generic. (WRB) 26C 890531 REVISION DATE from Version 3.2 27C 891214 Prologue converted to Version 4.0 format. (BAB) 28C 900727 Added EXTERNAL statement. (WRB) 29C 920618 Removed space from variable name. (RWC, WRB) 30C***END PROLOGUE DERF 31 DOUBLE PRECISION X, ERFCS(21), SQEPS, SQRTPI, XBIG, Y, D1MACH, 32 1 DCSEVL, DERFC 33 LOGICAL FIRST 34 EXTERNAL DERFC 35 SAVE ERFCS, SQRTPI, NTERF, XBIG, SQEPS, FIRST 36 DATA ERFCS( 1) / -.4904612123 4691808039 9845440333 76 D-1 / 37 DATA ERFCS( 2) / -.1422612051 0371364237 8247418996 31 D+0 / 38 DATA ERFCS( 3) / +.1003558218 7599795575 7546767129 33 D-1 / 39 DATA ERFCS( 4) / -.5768764699 7674847650 8270255091 67 D-3 / 40 DATA ERFCS( 5) / +.2741993125 2196061034 4221607914 71 D-4 / 41 DATA ERFCS( 6) / -.1104317550 7344507604 1353812959 05 D-5 / 42 DATA ERFCS( 7) / +.3848875542 0345036949 9613114981 74 D-7 / 43 DATA ERFCS( 8) / -.1180858253 3875466969 6317518015 81 D-8 / 44 DATA ERFCS( 9) / +.3233421582 6050909646 4029309533 54 D-10 / 45 DATA ERFCS( 10) / -.7991015947 0045487581 6073747085 95 D-12 / 46 DATA ERFCS( 11) / +.1799072511 3961455611 9672454866 34 D-13 / 47 DATA ERFCS( 12) / -.3718635487 8186926382 3168282094 93 D-15 / 48 DATA ERFCS( 13) / +.7103599003 7142529711 6899083946 66 D-17 / 49 DATA ERFCS( 14) / -.1261245511 9155225832 4954248533 33 D-18 / 50 DATA ERFCS( 15) / +.2091640694 1769294369 1705002666 66 D-20 / 51 DATA ERFCS( 16) / -.3253973102 9314072982 3641600000 00 D-22 / 52 DATA ERFCS( 17) / +.4766867209 7976748332 3733333333 33 D-24 / 53 DATA ERFCS( 18) / -.6598012078 2851343155 1999999999 99 D-26 / 54 DATA ERFCS( 19) / +.8655011469 9637626197 3333333333 33 D-28 / 55 DATA ERFCS( 20) / -.1078892517 7498064213 3333333333 33 D-29 / 56 DATA ERFCS( 21) / +.1281188399 3017002666 6666666666 66 D-31 / 57 DATA SQRTPI / 1.772453850 9055160272 9816748334 115D0 / 58 DATA FIRST /.TRUE./ 59C***FIRST EXECUTABLE STATEMENT DERF 60 IF (FIRST) THEN 61 NTERF = INITDS (ERFCS, 21, 0.1*REAL(D1MACH(3))) 62 XBIG = SQRT(-LOG(SQRTPI*D1MACH(3))) 63 SQEPS = SQRT(2.0D0*D1MACH(3)) 64 ENDIF 65 FIRST = .FALSE. 66C 67 Y = ABS(X) 68 IF (Y.GT.1.D0) GO TO 20 69C 70C ERF(X) = 1.0 - ERFC(X) FOR -1.0 .LE. X .LE. 1.0 71C 72 IF (Y.LE.SQEPS) DERF = 2.0D0*X/SQRTPI 73 IF (Y.GT.SQEPS) DERF = X*(1.0D0 + DCSEVL (2.D0*X*X-1.D0, 74 1 ERFCS, NTERF)) 75 RETURN 76C 77C ERF(X) = 1.0 - ERFC(X) FOR ABS(X) .GT. 1.0 78C 79 20 IF (Y.LE.XBIG) DERF = SIGN (1.0D0-DERFC(Y), X) 80 IF (Y.GT.XBIG) DERF = SIGN (1.0D0, X) 81C 82 RETURN 83 END 84