Fix division of two negative FastRational{BigInt} #25
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Currently:
as with any division of two negative
FastRational{BigInt}
, which hit me today as soon as I tried going fromRational{BigInt}
toFastRational{BigInt}
.This PR fixes this by adding a specialized method for
/(x::FastRational{T}, y::FastRational{T}) where {T<:BigInt}
that simply bypasses the check withtypemax(T)
. It's not a very clever fix, but I could not find another way to implement it that did not have any performance hit. In particular, I tried adding anisapplicable(typemax, T)
check butT
was not const-propagated (which is not a surprise I think), or, alternatively,hasmethod(typemax, Tuple{Type{BigInt}})
but it does not specialize on its arguments. If anyone has any idea, I will gladly update the PR! But in the meantime it does the job.I added
FastQBig
among the tests (as well as the particular bug this PR fixes). Some tests that were commented out and marked with a# FIXME!!!
actually work so I uncommented them. Let me know if this is a mistake!