Skip to content

Commit

Permalink
Added rationalize for Complex numbers (JuliaLang#42570)
Browse files Browse the repository at this point in the history
  • Loading branch information
DebadityaPal committed Oct 21, 2021
1 parent 51c43e8 commit dc46ad9
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 0 deletions.
2 changes: 2 additions & 0 deletions base/rational.jl
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,8 @@ function rationalize(::Type{T}, x::AbstractFloat, tol::Real) where T<:Integer
end
rationalize(::Type{T}, x::AbstractFloat; tol::Real = eps(x)) where {T<:Integer} = rationalize(T, x, tol)::Rational{T}
rationalize(x::AbstractFloat; kvs...) = rationalize(Int, x; kvs...)
rationalize(::Type{T}, x::Complex; kvs...) where {T<:Integer} = Complex(rationalize(T, x.re, kvs...)::Rational{T}, rationalize(T, x.im, kvs...)::Rational{T})
rationalize(x::Complex; kvs...) = Complex(rationalize(Int, x.re, kvs...), rationalize(Int, x.im, kvs...))

"""
numerator(x)
Expand Down
8 changes: 8 additions & 0 deletions test/rational.jl
Original file line number Diff line number Diff line change
Expand Up @@ -630,3 +630,11 @@ end
A=Rational[1 1 1; 2 2 2; 3 3 3]
@test @inferred(A*A) isa Matrix{Rational}
end

@testset "issue #42560" begin
@test rationalize(0.5 + 0.5im) == 1//2 + 1//2*im
@test rationalize(float(pi)im) == 0//1 + 165707065//52746197*im
@test rationalize(Int8, float(pi)im) == 0//1 + 22//7*im
@test rationalize(1.192 + 2.233im) == 149//125 + 2233//1000*im
@test rationalize(Int8, 1.192 + 2.233im) == 118//99 + 67//30*im
end

0 comments on commit dc46ad9

Please sign in to comment.