Determine the starting point for backward recurrence such that all Jn(x) has MP significant digits
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=wp), | intent(in) | :: | x |
Argument of Jn(x) |
||
| integer, | intent(in) | :: | n |
Order of Jn(x) |
||
| integer, | intent(in) | :: | Mp |
Significant digit |
Starting point
function msta2(x,n,Mp) result(nn) real(wp),intent(in) :: x !! Argument of Jn(x) integer,intent(in) :: n !! Order of Jn(x) integer,intent(in) :: Mp !! Significant digit integer :: nn !! Starting point real(wp) :: a0 , ejn , f , f0 , f1 , hmp , obj integer :: it , n0 , n1 a0 = abs(x) hmp = 0.5_wp*Mp ejn = envj(n,a0) if ( ejn<=hmp ) then obj = Mp n0 = int(1.1_wp*a0) + 1 else obj = hmp + ejn n0 = n endif f0 = envj(n0,a0) - obj n1 = n0 + 5 f1 = envj(n1,a0) - obj do it = 1 , 20 nn = n1 - (n1-n0)/(1.0_wp-f0/f1) f = envj(nn,a0) - obj if ( abs(nn-n1)<1 ) exit n0 = n1 f0 = f1 n1 = nn f1 = f enddo nn = nn + 10 end function msta2