diff --git a/base/special/exp.jl b/base/special/exp.jl index 4e48e3699bef0..7e7f9b100b439 100644 --- a/base/special/exp.jl +++ b/base/special/exp.jl @@ -304,9 +304,9 @@ end N = unsafe_trunc(Int32, N_float) r = muladd(N_float, LogB(base, Float16), x) small_part = expb_kernel(base, r) - if !(abs(x) <= SUBNORM_EXP(base, T)) - x > MAX_EXP(base, T) && return Inf16 - x < MIN_EXP(base, T) && return zero(Float16) + if !(abs(x) <= 25) + x > 16 && return Inf16 + x < 25 && return zero(Float16) end twopk = reinterpret(T, (N+Int32(127)) << Int32(23)) return Float16(twopk*small_part) diff --git a/test/math.jl b/test/math.jl index 57d7de3af36df..b74c14a54b9b3 100644 --- a/test/math.jl +++ b/test/math.jl @@ -316,10 +316,13 @@ end X = Iterators.flatten((minval:T(.1):maxval, minval/100:T(.0021):maxval/100, minval/10000:T(.000021):maxval/10000, - nextfloat(zero(T)) )) + nextfloat(zero(T)), + T(-100):T(1):T(100) )) for x in X y, yb = func(x), func(widen(x)) - @test abs(y-yb) <= 1.2*eps(T(yb)) + if isfinite(eps(T(yb))) + @test abs(y-yb) <= 1.2*eps(T(yb)) + end end end @testset "$T $func edge cases" begin