@@ -34,8 +34,7 @@ function besseli0x(x::T) where T <: Union{Float32, Float64}
34
34
return evalpoly (inv (x), besseli0_large_coefs (T)) / sqrt (x)
35
35
end
36
36
end
37
- function besseli1 (x:: Float32 )
38
- T = Float32
37
+ function besseli1 (x:: T ) where T <: Union{Float32, Float64}
39
38
z = abs (x)
40
39
if z < 7.75
41
40
a = z * z / 4
@@ -51,46 +50,14 @@ function besseli1(x::Float32)
51
50
end
52
51
return z
53
52
end
54
- function besseli1 (x:: Float64 )
55
- T = Float64
56
- z = abs (x)
57
- if z < 7.75
58
- a = z * z / 4
59
- inner = (one (T), T (0.5 ), evalpoly (a, besseli1_small_coefs (T)))
60
- z = z * evalpoly (a, inner) / 2
61
- else
62
- a = exp (z / 2 )
63
- s = a * evalpoly (inv (z), besseli1_med_coefs (T)) / sqrt (z)
64
- z = a * s
65
- end
66
- if x < zero (x)
67
- z = - z
68
- end
69
- return z
70
- end
71
- function besseli1x (x:: Float32 )
72
- T = Float32
73
- z = abs (x)
74
- if z < 7.75
75
- a = z * z / 4
76
- inner = (one (T), T (0.5 ), evalpoly (a, besseli1_small_coefs (T)))
77
- z = z * evalpoly (a, inner) / 2 * exp (- z)
78
- else
79
- z = evalpoly (inv (z), besseli1_med_coefs (T)) / sqrt (z)
80
- end
81
- if x < zero (x)
82
- z = - z
83
- end
84
- return z
85
- end
86
- function besseli1x (x:: Float64 )
87
- T = Float64
53
+ function besseli1x (x:: T ) where T <: Union{Float32, Float64}
54
+ T == Float32 ? branch = 50 : branch = 500
88
55
z = abs (x)
89
56
if z < 7.75
90
57
a = z * z / 4
91
58
inner = (one (T), T (0.5 ), evalpoly (a, besseli1_small_coefs (T)))
92
59
z = z * evalpoly (a, inner) / 2 * exp (- z)
93
- elseif z < 500
60
+ elseif z < branch
94
61
z = evalpoly (inv (z), besseli1_med_coefs (T)) / sqrt (z)
95
62
else
96
63
z = evalpoly (inv (z), besseli1_large_coefs (T)) / sqrt (z)
0 commit comments