diff --git a/base/rational.jl b/base/rational.jl index 8c5244ea4bad3..707b740fb2048 100644 --- a/base/rational.jl +++ b/base/rational.jl @@ -443,7 +443,7 @@ fma(x::Rational, y::Rational, z::Rational) = x*y+z function ==(x::AbstractFloat, q::Rational) if isfinite(x) - (count_ones(q.den) == 1) & (x*q.den == q.num) + (count_ones(q.den) == 1) & (ldexp(x, top_set_bit(q.den-1)) == q.num) else x == q.num/q.den end diff --git a/test/rational.jl b/test/rational.jl index fe707cb7d3521..b07842e759f99 100644 --- a/test/rational.jl +++ b/test/rational.jl @@ -837,3 +837,8 @@ end @test_throws OverflowError numerator(Int8(1)//Int8(31) + Int8(8)im//Int8(3)) end end + +@testset "Float16 comparison" begin + @test Float16(6.0e-8) == big(1//16777216) == 1//16777216 + @test Float16(6.0e-8) == 1//16777216 +end