From 07860181ff88292df7d3ead09628cc2b1cef3f9d Mon Sep 17 00:00:00 2001 From: Oscar Smith Date: Mon, 25 Jul 2022 15:21:43 -0400 Subject: [PATCH] fix rem2pi for non-finite arguments (#46163) --- base/math.jl | 8 ++++---- test/numbers.jl | 10 ++++++---- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/base/math.jl b/base/math.jl index 27c9caa095d67..eb6ae140876b1 100644 --- a/base/math.jl +++ b/base/math.jl @@ -1239,7 +1239,7 @@ julia> rem2pi(7pi/4, RoundDown) """ function rem2pi end function rem2pi(x::Float64, ::RoundingMode{:Nearest}) - isnan(x) && return NaN + isfinite(x) || return NaN abs(x) < pi && return x @@ -1264,7 +1264,7 @@ function rem2pi(x::Float64, ::RoundingMode{:Nearest}) end end function rem2pi(x::Float64, ::RoundingMode{:ToZero}) - isnan(x) && return NaN + isfinite(x) || return NaN ax = abs(x) ax <= 2*Float64(pi,RoundDown) && return x @@ -1291,7 +1291,7 @@ function rem2pi(x::Float64, ::RoundingMode{:ToZero}) copysign(z,x) end function rem2pi(x::Float64, ::RoundingMode{:Down}) - isnan(x) && return NaN + isfinite(x) || return NaN if x < pi4o2_h if x >= 0 @@ -1322,7 +1322,7 @@ function rem2pi(x::Float64, ::RoundingMode{:Down}) end end function rem2pi(x::Float64, ::RoundingMode{:Up}) - isnan(x) && return NaN + isfinite(x) || return NaN if x > -pi4o2_h if x <= 0 diff --git a/test/numbers.jl b/test/numbers.jl index 5f7553ab6c66e..bc838211bc698 100644 --- a/test/numbers.jl +++ b/test/numbers.jl @@ -2676,10 +2676,12 @@ end end @testset "PR #36420 $T" for T in (Float16, Float32, Float64) - @test rem2pi(T(NaN), RoundToZero) === T(NaN) - @test rem2pi(T(NaN), RoundNearest) === T(NaN) - @test rem2pi(T(NaN), RoundDown) === T(NaN) - @test rem2pi(T(NaN), RoundUp) === T(NaN) + for r in (RoundToZero, RoundNearest, RoundDown, RoundUp) + for x in (Inf, -Inf, NaN, -NaN) + @test isnan(rem2pi(T(x), r)) + @test rem2pi(T(x), r) isa T + end + end end import Base.^