@@ -224,6 +224,8 @@ besselj(nu, x::Real) = _besselj(nu, float(x))
224
224
225
225
_besselj (nu:: Union{Int16, Float16} , x:: Union{Int16, Float16} ) = Float16 (_besselj (Float32 (nu), Float32 (x)))
226
226
227
+ _besselj (nu:: AbstractRange , x:: T ) where T = besselj! (zeros (T, length (nu)), nu, x)
228
+
227
229
function _besselj (nu:: T , x:: T ) where T <: Union{Float32, Float64}
228
230
isinteger (nu) && return _besselj (Int (nu), x)
229
231
abs_nu = abs (nu)
@@ -269,12 +271,15 @@ function _besselj(nu::Integer, x::T) where T <: Union{Float32, Float64}
269
271
end
270
272
end
271
273
272
- function _besselj (nu:: AbstractRange , x:: T ) where T
274
+ besselj! (out:: DenseVector , nu:: AbstractRange , x) = _besselj! (out, nu, float (x))
275
+
276
+ function _besselj! (out:: DenseVector{T} , nu:: AbstractVector , x:: T ) where T <: Union{Float32, Float64}
273
277
(nu[1 ] >= 0 && step (nu) == 1 ) || throw (ArgumentError (" nu must be >= 0 with step(nu)=1" ))
274
- len = length (nu)
278
+ len = length (out)
279
+ ! isequal (len, length (nu)) && throw (ArgumentError (" out and nu must have the same length" ))
280
+
275
281
isone (len) && return [besselj (nu[1 ], x)]
276
282
277
- out = zeros (T, len)
278
283
if nu[end ] < x
279
284
out[1 ], out[2 ] = _besselj (nu[1 ], x), _besselj (nu[2 ], x)
280
285
return besselj_up_recurrence! (out, x, nu)
0 commit comments