@@ -53,27 +53,19 @@ function besselj0(x::Float64)
53
53
sc = sincos (xn)
54
54
p = p * sc[2 ] - w * q * sc[1 ]
55
55
return p * SQ2OPI (T) / sqrt (x)
56
- elseif x < 75.0
57
- xinv = inv (x)
58
- x2 = xinv * xinv
59
- p = (one (T), - 9 / 128 , 3675 / 32768 , - 2401245 / 4194304 , 13043905875 / 2147483648 , - 30241281245175 / 274877906944 , 213786613951685775 / 70368744177664 , - 1070401384414690453125 / 9007199254740992 , 57673297952355815927071875 / 9223372036854775808 )
60
- q = (- 1 / 8 , 75 / 1024 , - 59535 / 262144 , 57972915 / 33554432 , - 418854310875 / 17179869184 , 1212400457192925 / 2199023255552 , - 10278202593831046875 / 562949953421312 , 60013837619516978071875 / 72057594037927936 , - 3694483615889146090857721875 / 73786976294838206464 )
61
- p = evalpoly (x2, p)
62
- q = evalpoly (x2, q) * xinv
63
- alpha = atan (- q/ p)
64
-
65
- pq = (one (T), - 1 / 16 , 53 / 512 , - 4447 / 8192 , 3066403 / 524288 , - 896631415 / 8388608 , 796754802993 / 268435456 , - 500528959023471 / 4294967296 )
66
- beta = evalpoly (x2, pq)
67
- return SQ2OPI (T) * sqrt (xinv) * beta * cos_sum (x, - T (pi )/ 4 - alpha)
68
56
else
57
+ if x < 75.0
58
+ p = (one (T), - 1 / 16 , 53 / 512 , - 4447 / 8192 , 3066403 / 524288 , - 896631415 / 8388608 , 796754802993 / 268435456 , - 500528959023471 / 4294967296 )
59
+ q = (- 1 / 8 , 25 / 384 , - 1073 / 5120 , 375733 / 229376 , - 55384775 / 2359296 , 24713030909 / 46137344 , - 7780757249041 / 436207616 )
60
+ else
61
+ p = (one (T), - 1 / 16 , 53 / 512 , - 4447 / 8192 , 3066403 / 524288 )
62
+ q = (- 1 / 8 , 25 / 384 , - 1073 / 5120 , 375733 / 229376 , - 55384775 / 2359296 )
63
+ end
69
64
xinv = inv (x)
70
65
x2 = xinv* xinv
71
66
72
- p = (one (T), - 1 / 16 , 53 / 512 , - 4447 / 8192 , 3066403 / 524288 )
73
67
p = evalpoly (x2, p)
74
68
a = SQ2OPI (T) * sqrt (xinv) * p
75
-
76
- q = (- 1 / 8 , 25 / 384 , - 1073 / 5120 , 375733 / 229376 , - 55384775 / 2359296 )
77
69
xn = muladd (xinv, evalpoly (x2, q), - PIO4 (T))
78
70
79
71
# the following computes b = cos(x + xn) more accurately
@@ -82,6 +74,8 @@ function besselj0(x::Float64)
82
74
return a * b
83
75
end
84
76
end
77
+
78
+
85
79
function besselj0 (x:: Float32 )
86
80
T = Float32
87
81
x = abs (x)
@@ -125,27 +119,19 @@ function besselj1(x::Float64)
125
119
sc = sincos (xn)
126
120
p = p * sc[2 ] - w * q * sc[1 ]
127
121
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)
140
122
else
123
+ if x < 120.0
124
+ p = (one (T), 3 / 16 , - 99 / 512 , 6597 / 8192 , - 4057965 / 524288 , 1113686901 / 8388608 , - 951148335159 / 268435456 , 581513783771781 / 4294967296 )
125
+ q = (3 / 8 , - 21 / 128 , 1899 / 5120 , - 543483 / 229376 , 8027901 / 262144 , - 30413055339 / 46137344 , 9228545313147 / 436207616 )
126
+ else
127
+ p = (one (T), 3 / 16 , - 99 / 512 , 6597 / 8192 )
128
+ q = (3 / 8 , - 21 / 128 , 1899 / 5120 , - 543483 / 229376 )
129
+ end
141
130
xinv = inv (x)
142
131
x2 = xinv* xinv
143
132
144
- p = (one (T), 3 / 16 , - 99 / 512 , 6597 / 8192 , - 4057965 / 524288 )
145
133
p = evalpoly (x2, p)
146
134
a = SQ2OPI (T) * sqrt (xinv) * p
147
-
148
- q = (3 / 8 , - 21 / 128 , 1899 / 5120 , - 543483 / 229376 , 8027901 / 262144 )
149
135
xn = muladd (xinv, evalpoly (x2, q), - 3 * PIO4 (T))
150
136
151
137
# the following computes b = cos(x + xn) more accurately
@@ -154,7 +140,6 @@ function besselj1(x::Float64)
154
140
return a * b
155
141
end
156
142
end
157
-
158
143
function besselj1 (x:: Float32 )
159
144
x = abs (x)
160
145
isinf (x) && return zero (x)
0 commit comments