Skip to content

Commit 77a860d

Browse files
author
Chris Geoga
committed
Switch convergence tests to Math.check_convergence, add second rule to
`Enzyme` extension for two-argument `Math.check_convergence`.
1 parent 03b070f commit 77a860d

File tree

3 files changed

+11
-5
lines changed

3 files changed

+11
-5
lines changed

ext/BesselsEnzymeCoreExt.jl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,13 @@ module BesselsEnzymeCoreExt
2424
(t.val <= eps(T)) && (t.dval <= eps(T))
2525
end
2626

27+
function EnzymeRules.forward(func::Const{typeof(check_convergence)},
28+
::Type{Const{Bool}},
29+
t::Duplicated{T},
30+
s::Duplicated{T}) where{T}
31+
(t.val <= eps(T)*s.val) && (t.dval <= eps(T)*s.dval)
32+
end
33+
2734
# This will be fixed upstream: see #861 for Enzyme.jl whenever the next
2835
# release occurs.
2936
function EnzymeRules.forward(func::Const{typeof(sinpi)},

src/BesselFunctions/besseli.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -624,7 +624,7 @@ function besseli_power_series(v, x::ComplexOrReal{T}) where T
624624
xx = x * x * T(0.25)
625625
for i in 0:MaxIter
626626
s += t
627-
abs(t) < eps(T) * abs(s) && break
627+
Math.check_convergence(t, s) && break
628628
t *= xx / ((v + i + 1) * (i + 1))
629629
end
630630
return s * ((x/2)^v / gamma(v + 1))

src/BesselFunctions/besselk.jl

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -458,7 +458,7 @@ function besselkx_large_args(v, x::ComplexOrReal{T}) where T
458458
for i in 1:MaxIter
459459
t *= invx * ((4*v^2 - (2i - 1)^2) / i)
460460
s += t
461-
abs(t) <= eps(T) && break
461+
Math.check_convergence(t) && break
462462
end
463463
return s * sqrt/ (2 * x))
464464
end
@@ -552,7 +552,7 @@ function besselk_power_series(v, x::ComplexOrReal{T}) where T
552552
s2 += t2
553553
t1 *= x^2 / (4k * (k - v))
554554
t2 *= x^2 / (4k * (k + v))
555-
abs(t1) < eps(T) && break
555+
Math.check_convergence(t1) && break
556556
end
557557

558558
xpv = (x/2)^v
@@ -590,8 +590,7 @@ function besselk_temme_series(v::T, x::T) where T <: Float64
590590
term_vp1 = ck * (pk - (k-1) * fk)
591591
out_v += term_v
592592
out_vp1 += term_vp1
593-
((abs(term_v) < eps(T)) && (abs(term_vp1) < eps(T))) && break
594-
593+
(Math.check_convergence(term_v) && Math.check_convergence(term_vp1)) && break
595594
fk = (k * fk + pk + qk) / (k^2 - v^2)
596595
pk /= k - v
597596
qk /= k + v

0 commit comments

Comments
 (0)