From 90f8b1742bc7b655f7f72cd6b34227e61ba9a011 Mon Sep 17 00:00:00 2001 From: "Steven G. Johnson" Date: Sun, 13 Sep 2020 09:43:40 -0400 Subject: [PATCH] fix sinc(Inf+Inf*im) (#37547) * fix sinc(Inf+Inf*im) * added cosc test --- base/special/trig.jl | 6 ++---- test/math.jl | 3 +++ 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/base/special/trig.jl b/base/special/trig.jl index 962404d4a3c6d..40feaeb79522d 100644 --- a/base/special/trig.jl +++ b/base/special/trig.jl @@ -1079,10 +1079,8 @@ sinc(x::Integer) = iszero(x) ? one(x) : zero(x) _sinc(x::Number) = iszero(x) ? one(x) : isinf_real(x) ? zero(x) : sinpi(x)/(pi*x) _sinc_threshold(::Type{Float64}) = 0.001 _sinc_threshold(::Type{Float32}) = 0.05f0 -@inline function _sinc(x::Union{T,Complex{T}}) where {T<:Union{Float32,Float64}} - a = fastabs(x) - return a < _sinc_threshold(T) ? evalpoly(x^2, (T(1), -T(pi)^2/6, T(pi)^4/120)) : isinf_real(a) ? zero(x) : sinpi(x)/(pi*x) -end +@inline _sinc(x::Union{T,Complex{T}}) where {T<:Union{Float32,Float64}} = + fastabs(x) < _sinc_threshold(T) ? evalpoly(x^2, (T(1), -T(pi)^2/6, T(pi)^4/120)) : isinf_real(x) ? zero(x) : sinpi(x)/(pi*x) _sinc(x::Float16) = Float16(_sinc(Float32(x))) _sinc(x::ComplexF16) = ComplexF16(_sinc(ComplexF32(x))) diff --git a/test/math.jl b/test/math.jl index 9574e3bd3ffb7..35e341801a73b 100644 --- a/test/math.jl +++ b/test/math.jl @@ -469,6 +469,9 @@ end @test sinc(Inf + 3im) == 0 @test cosc(Inf + 3im) == 0 + + @test isequal(sinc(Inf + Inf*im), NaN + NaN*im) + @test isequal(cosc(Inf + Inf*im), NaN + NaN*im) end # issue #37227