Skip to content

Commit e8a1e5c

Browse files
authored
fix spurious domainerror for expint(3.2, 1.3) (#280)
1 parent cdd323d commit e8a1e5c

File tree

2 files changed

+7
-2
lines changed

2 files changed

+7
-2
lines changed

src/expint.jl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,11 @@ function En_cf_nogamma(ν::Number, z::Number, n::Int=1000)
196196
end
197197

198198
# Calculate Γ(1 - ν) * z^(ν-1) safely
199-
En_safe_gamma_term::Number, z::Number) = exp((ν - 1)*log(z) + loggamma(1 - oftype(z, ν)))
199+
function En_safe_gamma_term::Number, z::Number)
200+
ν1 = 1 - oftype(z, ν)
201+
lgamma, lgammasign = ν1 isa Real ? logabsgamma(ν1) : (loggamma(ν1), 1)
202+
return lgammasign * exp((ν - 1)*log(z) + lgamma)
203+
end
200204
En_safe_gamma_term::Integer, z::Real) = (z 0 || isodd(ν) ? 1 : -1) * exp((ν - 1)*log(abs(z)) + loggamma(1 - oftype(z, ν)))
201205

202206
# continued fraction for En(ν, z) that uses the gamma function:

test/expint.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,8 @@ using Base.MathConstants
128128
@test expint(-2, 2.2) 0.11696351427428933590118175681379776 rtol=1e-14
129129
@test expint(-2, -2.2) -2.0680909972407264331884989 rtol=1e-14
130130
@test expint(-2.2, 3.2) 0.024950173497409329191241353395358 rtol=1e-14
131-
#@test expint(+2.2, 3.2) ≈ 0.008044603700773423319087602010 rtol=1e-14
131+
@test expint(+2.2, 3.2) 0.008044603700773423319087602010 rtol=1e-12
132+
@test expint(3.2, 1.3) 0.070147692224611216675759479422283315452559216337905 rtol=1e-14
132133
end
133134

134135
expinti_real(x) = invoke(expinti, Tuple{Real}, x)

0 commit comments

Comments
 (0)