Blame view
fvn_fnlib/dbesi1.f
2.52 KB
38581db0c git-svn-id: https... |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
double precision function dbesi1 (x) c oct 1983 edition. w. fullerton, c3, los alamos scientific lab. double precision x, bi1cs(17), xmax, xmin, xsml, y, d1mach, 1 dcsevl, dbsi1e, dexp, dlog, dsqrt external d1mach, dbsi1e, dcsevl, initds c c series for bi1 on the interval 0. to 9.00000e+00 c with weighted error 1.44e-32 c log weighted error 31.84 c significant figures required 31.45 c decimal places required 32.46 c data bi1 cs( 1) / -.1971713261 0998597316 1385032181 49 d-2 / data bi1 cs( 2) / +.4073488766 7546480608 1553936520 14 d+0 / data bi1 cs( 3) / +.3483899429 9959455866 2450377837 87 d-1 / data bi1 cs( 4) / +.1545394556 3001236038 5984010584 89 d-2 / data bi1 cs( 5) / +.4188852109 8377784129 4588320041 20 d-4 / data bi1 cs( 6) / +.7649026764 8362114741 9597039660 69 d-6 / data bi1 cs( 7) / +.1004249392 4741178689 1798080372 38 d-7 / data bi1 cs( 8) / +.9932207791 9238106481 3712980548 63 d-10 / data bi1 cs( 9) / +.7663801791 8447637275 2001716813 49 d-12 / data bi1 cs( 10) / +.4741418923 8167394980 3880919481 60 d-14 / data bi1 cs( 11) / +.2404114404 0745181799 8631720320 00 d-16 / data bi1 cs( 12) / +.1017150500 7093713649 1211007999 99 d-18 / data bi1 cs( 13) / +.3645093565 7866949458 4917333333 33 d-21 / data bi1 cs( 14) / +.1120574950 2562039344 8106666666 66 d-23 / data bi1 cs( 15) / +.2987544193 4468088832 0000000000 00 d-26 / data bi1 cs( 16) / +.6973231093 9194709333 3333333333 33 d-29 / data bi1 cs( 17) / +.1436794822 0620800000 0000000000 00 d-31 / c data nti1, xmin, xsml, xmax / 0, 3*0.d0 / c if (nti1.ne.0) go to 10 nti1 = initds (bi1cs, 17, 0.1*sngl(d1mach(3))) xmin = 2.0d0*d1mach(1) xsml = dsqrt (8.0d0*d1mach(3)) xmax = dlog (d1mach(2)) c 10 y = dabs(x) if (y.gt.3.0d0) go to 20 c dbesi1 = 0.0d0 if (y.eq.0.0d0) return c if (y.le.xmin) call seteru ( 1 38hdbesi1 dabs(x) so small i1 underflows, 38, 1, 0) if (y.gt.xmin) dbesi1 = 0.5d0*x if (y.gt.xsml) dbesi1 = x*(0.875d0 + dcsevl (y*y/4.5d0-1.d0, 1 bi1cs, nti1)) return c 20 if (y.gt.xmax) call seteru ( 1 35hdbesi1 dabs(x) so big i1 overflows, 35, 2, 2) c dbesi1 = dexp(y) * dbsi1e(x) c return end |