From 21688c9a2b14e0942cd6a9772b08e83c410f684e Mon Sep 17 00:00:00 2001 From: Jutho Haegeman Date: Tue, 30 Jan 2018 16:47:07 +0800 Subject: [PATCH] improve speed of conversion from halfinteger to integer --- src/halfinteger.jl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/halfinteger.jl b/src/halfinteger.jl index 70dd722..033baf5 100644 --- a/src/halfinteger.jl +++ b/src/halfinteger.jl @@ -25,7 +25,9 @@ function Base.convert(::Type{HalfInteger}, r::Rational) end end Base.convert(::Type{HalfInteger}, r::Real) = convert(HalfInteger, convert(Rational, r)) -Base.convert(T::Type{<:Real}, s::HalfInteger) = convert(T, s.num//2) +Base.convert(T::Type{<:Integer}, s::HalfInteger) = iseven(s.num) ? convert(T, s.num>>1) : throw(InexactError()) +Base.convert(T::Type{<:Rational}, s::HalfInteger) = convert(T, s.num//2) +Base.convert(T::Type{<:Real}, s::HalfInteger) = convert(T, s.num/2) Base.convert(::Type{HalfInteger}, s::HalfInteger) = s Base.isinteger(a::HalfInteger) = iseven(a.num)