www.pudn.com > Fortran.zip > MBSL4.FOR, change:1995-04-01,size:1320b
FUNCTION MBSL4(N,X)
DOUBLE PRECISION MBSL4,X,MBSL3
DOUBLE PRECISION Y,P,B0,B1,A(7),B(7),C(7),D(7)
DATA A/-0.57721566,0.4227842,0.23069756,0.0348859,
* 0.00262698,0.0001075,0.0000074/
DATA B/1.0,0.15443144,-0.67278579,-0.18156897,
* -0.01919402,-0.00110404,-0.00004686/
DATA C/1.25331414,-0.07832358,0.02189568,-0.01062446,
* 0.00587872,-0.0025154,0.00053208/
DATA D/1.25331414,0.23498619,-0.0365562,0.01504268,
* -0.00780353,0.00325614,-0.00068245/
IF (N.LT.0) N=-N
IF (X.LT.0.0) X=-X
IF (X+1.0.EQ.1.0) THEN
MBSL4=1.0D+35
RETURN
END IF
IF (N.NE.1) THEN
IF (X.LE.2.0) THEN
Y=X*X/4.0
P=A(7)
DO 10 I=6,1,-1
10 P=P*Y+A(I)
P=P-MBSL3(0,X)*LOG(X/2.0)
ELSE
Y=2.0/X
P=C(7)
DO 20 I=6,1,-1
20 P=P*Y+C(I)
P=P*EXP(-X)/SQRT(X)
END IF
END IF
IF (N.EQ.0) THEN
MBSL4=P
RETURN
END IF
B0=P
IF (X.LE.2.0) THEN
Y=X*X/4.0
P=B(7)
DO 30 I=6,1,-1
30 P=P*Y+B(I)
P=P/X+MBSL3(1,X)*LOG(X/2.0)
ELSE
Y=2.0/X
P=D(7)
DO 40 I=6,1,-1
40 P=P*Y+D(I)
P=P*EXP(-X)/SQRT(X)
END IF
IF (N.EQ.1) THEN
MBSL4=P
RETURN
END IF
B1=P
Y=2.0/X
DO 50 I=1,N-1
P=B0+I*Y*B1
B0=B1
B1=P
50 CONTINUE
MBSL4=P
RETURN
END