Go to the documentation of this file.00001
00002 FUNCTION ERF (X)
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 DIMENSION ERFCS(13)
00032 LOGICAL FIRST
00033 EXTERNAL ERFC
00034 SAVE ERFCS, SQRTPI, NTERF, XBIG, SQEPS, FIRST
00035 DATA ERFCS( 1) / -.0490461212 34691808E0 /
00036 DATA ERFCS( 2) / -.1422612051 0371364E0 /
00037 DATA ERFCS( 3) / .0100355821 87599796E0 /
00038 DATA ERFCS( 4) / -.0005768764 69976748E0 /
00039 DATA ERFCS( 5) / .0000274199 31252196E0 /
00040 DATA ERFCS( 6) / -.0000011043 17550734E0 /
00041 DATA ERFCS( 7) / .0000000384 88755420E0 /
00042 DATA ERFCS( 8) / -.0000000011 80858253E0 /
00043 DATA ERFCS( 9) / .0000000000 32334215E0 /
00044 DATA ERFCS(10) / -.0000000000 00799101E0 /
00045 DATA ERFCS(11) / .0000000000 00017990E0 /
00046 DATA ERFCS(12) / -.0000000000 00000371E0 /
00047 DATA ERFCS(13) / .0000000000 00000007E0 /
00048 DATA SQRTPI /1.772453850 9055160E0/
00049 DATA FIRST /.TRUE./
00050
00051 IF (FIRST) THEN
00052 NTERF = INITS (ERFCS, 13, 0.1*R1MACH(3))
00053 XBIG = SQRT(-LOG(SQRTPI*R1MACH(3)))
00054 SQEPS = SQRT(2.0*R1MACH(3))
00055 ENDIF
00056 FIRST = .FALSE.
00057
00058 Y = ABS(X)
00059 IF (Y.GT.1.) GO TO 20
00060
00061
00062
00063 IF (Y.LE.SQEPS) ERF = 2.0*X/SQRTPI
00064 IF (Y.GT.SQEPS) ERF = X*(1.0 + CSEVL(2.*X**2-1., ERFCS, NTERF))
00065 RETURN
00066
00067
00068
00069 20 IF (Y.LE.XBIG) ERF = SIGN (1.0-ERFC(Y), X)
00070 IF (Y.GT.XBIG) ERF = SIGN (1.0, X)
00071
00072 RETURN
00073 END