Skip to content

Commit 1f651b7

Browse files
committed
update besselj1
1 parent 08e7248 commit 1f651b7

File tree

1 file changed

+14
-5
lines changed

1 file changed

+14
-5
lines changed

src/besselj.jl

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,15 +58,12 @@ function besselj0(x::Float64)
5858
x2 = xinv * xinv
5959
p = (one(T), -9/128, 3675/32768, - 2401245/4194304, 13043905875/2147483648, - 30241281245175/274877906944, 213786613951685775/70368744177664, -1070401384414690453125/9007199254740992, 57673297952355815927071875/9223372036854775808)
6060
q = (-1/8, 75/1024, - 59535/262144, 57972915/33554432, - 418854310875/17179869184, 1212400457192925/2199023255552, - 10278202593831046875/562949953421312, 60013837619516978071875/72057594037927936, - 3694483615889146090857721875/73786976294838206464)
61-
6261
p = evalpoly(x2, p)
6362
q = evalpoly(x2, q) * xinv
63+
alpha = atan(-q/p)
6464

6565
pq = (one(T), -1/16, 53/512, -4447/8192, 3066403/524288, -896631415/8388608, 796754802993/268435456, -500528959023471/4294967296)
6666
beta = evalpoly(x2, pq)
67-
68-
alpha = atan(-q/p)
69-
7067
return SQ2OPI(T) * sqrt(xinv) * beta * cos_sum(x, - T(pi)/4 - alpha)
7168
else
7269
xinv = inv(x)
@@ -119,7 +116,7 @@ function besselj1(x::Float64)
119116
w = evalpoly(z, RP_j1(T)) / evalpoly(z, RQ_j1(T))
120117
w = w * x * (z - 1.46819706421238932572e1) * (z - 4.92184563216946036703e1)
121118
return w
122-
elseif x < 75.0
119+
elseif x < 25.0
123120
w = 5.0 / x
124121
z = w * w
125122
p = evalpoly(z, PP_j1(T)) / evalpoly(z, PQ_j1(T))
@@ -128,6 +125,18 @@ function besselj1(x::Float64)
128125
sc = sincos(xn)
129126
p = p * sc[2] - w * q * sc[1]
130127
return p * SQ2OPI(T) / sqrt(x)
128+
elseif x < 75.0
129+
xinv = inv(x)
130+
x2 = xinv * xinv
131+
p = (one(T), 15/128, -4725/32768, 2837835/4194304, -14783093325/2147483648, 33424574007825/274877906944, -232376754295310625/70368744177664, 1149690375852815671875/9007199254740992)
132+
q = (3/8, -105/1024, 72765/262144, -66891825/33554432, 468131288625/17179869184, -1327867167401775/2199023255552, 11100458801337530625/562949953421312, -64152722972587114490625/72057594037927936)
133+
p = evalpoly(x2, p)
134+
q = evalpoly(x2, q) * xinv
135+
alpha = atan(-q/p)
136+
137+
pq = (one(T), 3/16, -99/512, 6597/8192, -4057965/524288, 1113686901/8388608, -951148335159/268435456, 581513783771781/4294967296, -3198424285940846836612419/9223372036854775808)
138+
beta = evalpoly(x2, pq)
139+
return SQ2OPI(T) * sqrt(xinv) * beta * cos_sum(x, - 3*T(pi)/4 - alpha)
131140
else
132141
xinv = inv(x)
133142
x2 = xinv*xinv

0 commit comments

Comments
 (0)