program erfi c c -- gaussian error c -- figure 11.5 c integer out real x, ans c out = 6 10 write(out, 101) read(*, 102) x if (x .lt. 0.0) goto 99 ans = erf(x) write(out, 104) ans goto 10 99 stop 101 format(/' arg? ' ) 102 format(e10.0) 104 format(' erf =', f10.5) end function erf(x) c c -- gaussian error function by infinite series c integer i real x, x2, sum, sum1, term data tol/1.0e-5/, sqrtpi/ 1.772454/ c erf = 0.0 if (x .eq. 0.0) goto 99 erf = 1.0 if (x .gt. 4.0) goto 99 x2 = x * x sum = x term = x i = 0 10 i = i + 1 sum1 = sum term = term * x2 / (i + 0.5) sum = term + sum1 if (term .ge. tol*sum) goto 10 erf = 2 * sum * exp(-x2) / sqrtpi 99 return 101 format(1x, i7, f9.5) end