Skip to content

Commit 077e0ef

Browse files
committed
simplify besselk_levin (use con. prop)
1 parent 5e1da6f commit 077e0ef

File tree

1 file changed

+20
-17
lines changed

1 file changed

+20
-17
lines changed

src/BesselFunctions/besselk.jl

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -578,15 +578,14 @@ end
578578
@generated function besselkx_levin(v, x::T, ::Val{N}) where {T <: FloatTypes, N}
579579
:(
580580
begin
581-
l = let (out, term, fv2) = (one(typeof(x)), one(typeof(x)), 4*v^2)
582-
@ntuple $N i -> begin
583-
offset = muladd(2, i, -1)
584-
term *= muladd(offset, -offset, fv2) / (8 * x * i)
585-
out += term
586-
invterm = inv(term)
587-
Vec{2, T}((out * invterm, invterm))
581+
s = zero(T)
582+
t = one(T)
583+
l = @ntuple $N i -> begin
584+
s += t
585+
t *= (4*v^2 - (2i - 1)^2) / (8 * x * i)
586+
invterm = inv(t)
587+
Vec{2, T}((s * invterm, invterm))
588588
end
589-
end
590589
return levin_transform(l) * sqrt/ 2x)
591590
end
592591
)
@@ -595,16 +594,20 @@ end
595594
@generated function besselkx_levin(v, x::Complex{T}, ::Val{N}) where {T <: FloatTypes, N}
596595
:(
597596
begin
598-
l = let (out, term, fv2, invx) = (one(typeof(x)), one(typeof(x)), 4*v^2, inv(8*x))
599-
@ntuple $N i -> begin
600-
offset = muladd(2, i, -1)
601-
term *= @fastmath muladd(offset, -offset, fv2) * invx / i
602-
out += term
603-
invterm = @fastmath inv(term)
604-
Vec{4, T}((reim(out * invterm)..., reim(invterm)...))
597+
s = zero(T)
598+
t = one(typeof(x))
599+
t2 = t
600+
a = @fastmath inv(8*x)
601+
a2 = 8*x
602+
603+
l = @ntuple $N i -> begin
604+
s += t
605+
b = (4*v^2 - (2i - 1)^2) / i
606+
t *= a * b
607+
t2 *= a2 / b
608+
Vec{4, T}((reim(s * t2)..., reim(t2)...))
605609
end
606-
end
607610
return levin_transform(l) * sqrt/ 2x)
608611
end
609612
)
610-
end
613+
end

0 commit comments

Comments
 (0)