Add div
family methods (div
, cld
, fld
, rem
, mod
)
#16
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.
This PR adds the
div
family methods (div
,cld
,fld
,rem
,mod
) and operators (÷
,%
) to the set.Since integer division is so slow (see #9), we can afford branches to avoid undefined behavior produced by just using the intrinsic directly. Could consider an unsafe mode, but unclear benefits from that at this stage.
For
unchecked
methods, we're defining divide-by-zero to produce zero, andtypemin() ÷ -1
to overflow totypemin(Int)
.For
saturating
methods, we're defining divide-by-zero to producetypemin()
,zero()
ortypemax()
based on the sign of the dividend, andtypemin() ÷ -1
producestypemax()
.Base.divrem
isn't present at the moment becauseBase.Checked
doesn't have achecked_divrem
method. Also, Base has a complicated infrastructure for rounding modes that isn't implemented here becauseBase.Checked
doesn't either.