@@ -23,14 +23,26 @@ function _bessely0_compute(x::Float64)
23
23
w = evalpoly (z, YP_y0 (T)) / evalpoly (z, YQ_y0 (T))
24
24
w += TWOOPI (T) * log (x) * besselj0 (x)
25
25
return w
26
- else
26
+ elseif x < 100.0
27
27
w = T (5 ) / x
28
28
z = w* w
29
29
p = evalpoly (z, PP_y0 (T)) / evalpoly (z, PQ_y0 (T))
30
30
q = evalpoly (z, QP_y0 (T)) / evalpoly (z, QQ_y0 (T))
31
31
xn = x - PIO4 (T)
32
32
p = p * sin (xn) + w * q * cos (xn);
33
33
return p * SQ2OPI (T) / sqrt (x)
34
+ else
35
+ xinv = inv (x)
36
+ x2 = xinv* xinv
37
+
38
+ p = (one (T), - 1 / 16 , 53 / 512 , - 4447 / 8192 , 5066403 / 524288 )
39
+ p = evalpoly (x2, p)
40
+ a = SQ2OPI (T) * sqrt (xinv) * p
41
+
42
+ q = (- 1 / 8 , 25 / 384 , - 1073 / 5120 , 375733 / 229376 , - 55384775 / 2359296 )
43
+ xn = muladd (xinv, evalpoly (x2, q), - PIO4 (T))
44
+ b = sin (x + xn)
45
+ return a * b
34
46
end
35
47
end
36
48
function _bessely0_compute (x:: Float32 )
@@ -71,14 +83,26 @@ function _bessely1_compute(x::Float64)
71
83
w = x * (evalpoly (z, YP_y1 (T)) / evalpoly (z, YQ_y1 (T)))
72
84
w += TWOOPI (T) * (besselj1 (x) * log (x) - inv (x))
73
85
return w
74
- else
86
+ elseif x < 100.0
75
87
w = T (5 ) / x
76
88
z = w * w
77
89
p = evalpoly (z, PP_j1 (T)) / evalpoly (z, PQ_j1 (T))
78
90
q = evalpoly (z, QP_j1 (T)) / evalpoly (z, QQ_j1 (T))
79
91
xn = x - THPIO4 (T)
80
92
p = p * sin (xn) + w * q * cos (xn)
81
93
return p * SQ2OPI (T) / sqrt (x)
94
+ else
95
+ xinv = inv (x)
96
+ x2 = xinv* xinv
97
+
98
+ p = (one (T), 3 / 16 , - 99 / 512 , 6597 / 8192 , - 4057965 / 524288 )
99
+ p = evalpoly (x2, p)
100
+ a = SQ2OPI (T) * sqrt (xinv) * p
101
+
102
+ q = (3 / 8 , - 21 / 128 , 1899 / 5120 , - 543483 / 229376 , 8027901 / 262144 )
103
+ xn = muladd (xinv, evalpoly (x2, q), - 3 * PIO4 (T))
104
+ b = sin (x + xn)
105
+ return a * b
82
106
end
83
107
end
84
108
0 commit comments