28
28
# [3] Harrison, John. "Fast and accurate Bessel function computation."
29
29
# 2009 19th IEEE Symposium on Computer Arithmetic. IEEE, 2009.
30
30
#
31
- function besselj0 (x:: T ) where T
31
+ function besselj0 (x:: Float64 )
32
+ T = Float64
32
33
x = abs (x)
33
34
isinf (x) && return zero (x)
34
35
@@ -42,7 +43,7 @@ function besselj0(x::T) where T
42
43
p = (z - DR1) * (z - DR2)
43
44
p = p * evalpoly (z, RP_j0 (T)) / evalpoly (z, RQ_j0 (T))
44
45
return p
45
- elseif x < 75 .0
46
+ elseif x < 25 .0
46
47
w = 5.0 / x
47
48
q = 25.0 / (x * x)
48
49
@@ -52,11 +53,26 @@ function besselj0(x::T) where T
52
53
sc = sincos (xn)
53
54
p = p * sc[2 ] - w * q * sc[1 ]
54
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
+
62
+ p = evalpoly (x2, p)
63
+ q = evalpoly (x2, q) * xinv
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
+
68
+ alpha = atan (- q/ p)
69
+
70
+ return SQ2OPI (T) * sqrt (xinv) * beta * cos_sum (x, - T (pi )/ 4 - alpha)
55
71
else
56
72
xinv = inv (x)
57
73
x2 = xinv* xinv
58
74
59
- p = (one (T), - 1 / 16 , 53 / 512 , - 4447 / 8192 , 5066403 / 524288 )
75
+ p = (one (T), - 1 / 16 , 53 / 512 , - 4447 / 8192 , 3066403 / 524288 )
60
76
p = evalpoly (x2, p)
61
77
a = SQ2OPI (T) * sqrt (xinv) * p
62
78
0 commit comments