Skip to content

Commit 86d1910

Browse files
Streamline interface
- Dispatches under private interface using single name: `_logabsgamma` - Return `Int` rather than `Int32` then convert
1 parent a61628e commit 86d1910

File tree

3 files changed

+25
-33
lines changed

3 files changed

+25
-33
lines changed

src/e_lgamma_r.jl

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -86,37 +86,37 @@
8686
=#
8787

8888
# Matches OpenLibm behavior (except commented out |x|≥2^52 early exit)
89-
function _lgamma_r(x::Float64)
89+
function _logabsgamma(x::Float64)
9090
ux = reinterpret(UInt64, x)
9191
hx = ux >>> 32 % Int32
9292
lx = ux % UInt32
9393

9494
#= purge off +-inf, NaN, +-0, tiny and negative arguments =#
95-
signgamp = Int32(1)
95+
signgam = 1
9696
ix = hx & 0x7fffffff
97-
ix 0x7ff00000 && return Inf, signgamp
98-
ix | lx == 0x00000000 && return Inf, signgamp
97+
ix 0x7ff00000 && return Inf, signgam
98+
ix | lx == 0x00000000 && return Inf, signgam
9999
if ix < 0x3b900000 #= |x|<2**-70, return -log(|x|) =#
100100
if hx < Int32(0)
101-
signgamp = Int32(-1)
102-
return -log(-x), signgamp
101+
signgam = -1
102+
return -log(-x), signgam
103103
else
104-
return -log(x), signgamp
104+
return -log(x), signgam
105105
end
106106
end
107107
if hx < Int32(0)
108-
# ix ≥ 0x43300000 && return Inf, signgamp #= |x|>=2**52, must be -integer =#
108+
# ix ≥ 0x43300000 && return Inf, signgam #= |x|>=2**52, must be -integer =#
109109
t = sinpi(x)
110-
iszero(t) && return Inf, signgamp #= -integer =#
110+
iszero(t) && return Inf, signgam #= -integer =#
111111
nadj = log/ abs(t * x))
112-
if t < 0.0; signgamp = Int32(-1); end
112+
if t < 0.0; signgam = -1; end
113113
x = -x
114114
end
115115
if ix 0x40000000 #= for 1.0 ≤ x ≤ 2.0 =#
116116
i = round(x, RoundToZero)
117117
f = x - i
118118
if f == 0.0 #= purge off 1 and 2 =#
119-
return 0.0, signgamp
119+
return 0.0, signgam
120120
elseif i == 1.0
121121
r = 0.0
122122
c = 1.0
@@ -171,5 +171,5 @@ function _lgamma_r(x::Float64)
171171
if hx < Int32(0)
172172
r = nadj - r
173173
end
174-
return r, signgamp
174+
return r, signgam
175175
end

src/e_lgammaf_r.jl

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,36 +16,36 @@
1616
=#
1717

1818
# Matches OpenLibm behavior exactly, including return of sign
19-
function _lgammaf_r(x::Float32)
19+
function _logabsgamma(x::Float32)
2020
hx = reinterpret(Int32, x)
2121

2222
#= purge off +-inf, NaN, +-0, tiny and negative arguments =#
23-
signgamp = Int32(1)
23+
signgam = 1
2424
ix = hx & 0x7fffffff
25-
ix 0x7f800000 && return Inf32, signgamp
26-
ix == 0x00000000 && return Inf32, signgamp
25+
ix 0x7f800000 && return Inf32, signgam
26+
ix == 0x00000000 && return Inf32, signgam
2727
if ix < 0x35000000 #= |x|<2**-21, return -log(|x|) =#
2828
if hx < Int32(0)
29-
signgamp = Int32(-1)
30-
return -log(-x), signgamp
29+
signgam = -1
30+
return -log(-x), signgam
3131
else
32-
return -log(x), signgamp
32+
return -log(x), signgam
3333
end
3434
end
3535
if hx < Int32(0)
36-
# ix ≥ 0x4b000000 && return Inf32, signgamp #= |x|>=2**23, must be -integer =#
36+
# ix ≥ 0x4b000000 && return Inf32, signgam #= |x|>=2**23, must be -integer =#
3737
t = sinpi(x)
38-
t == 0.0f0 && return Inf32, signgamp #= -integer =#
38+
t == 0.0f0 && return Inf32, signgam #= -integer =#
3939
nadj = log/ abs(t * x))
40-
if t < 0.0f0; signgamp = Int32(-1); end
40+
if t < 0.0f0; signgam = -1; end
4141
x = -x
4242
end
4343

4444
if ix 0x40000000 #= for 1.0 ≤ x ≤ 2.0 =#
4545
i = round(x, RoundToZero)
4646
f = x - i
4747
if f == 0.0f0 #= purge off 1 and 2 =#
48-
return 0.0f0, signgamp
48+
return 0.0f0, signgam
4949
elseif i == 1.0f0
5050
r = 0.0f0
5151
c = 1.0f0
@@ -101,5 +101,5 @@ function _lgammaf_r(x::Float32)
101101
if hx < Int32(0)
102102
r = nadj - r
103103
end
104-
return r, signgamp
104+
return r, signgam
105105
end

src/gamma.jl

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -598,16 +598,8 @@ See also [`loggamma`](@ref).
598598
"""
599599
logabsgamma(x::Real) = _logabsgamma(float(x))
600600

601-
function _logabsgamma(x::Float64)
602-
y, s = _lgamma_r(x)
603-
return y, Int(s)
604-
end
605-
function _logabsgamma(x::Float32)
606-
y, s = _lgammaf_r(x)
607-
return y, Int(s)
608-
end
609601
function _logabsgamma(x::Float16)
610-
y, s = _lgammaf_r(Float32(x))
602+
y, s = _logabsgamma(Float32(x))
611603
return Float16(y), s
612604
end
613605

0 commit comments

Comments
 (0)