[swift-evolution] [Review] SE-0104: Protocol-oriented integers

Nicola Salmoria nicola.salmoria at gmail.com
Thu Jun 23 16:38:13 CDT 2016


Max Moiseev via swift-evolution <swift-evolution at ...> writes:

> > For FixedWidthInteger#dividedWithOverflow/remainderWithOverflow, under
what situations would
> you have an overflow? I could only come up with something like
Int.min.dividedWithOverflow(-1).
> If you look at the prototype here:
>
https://github.com/apple/swift/blob/master/test/Prototypes
/Integers.swift.gyb#L789
> there is
> exactly the check that you’ve mentioned, but for all signed integers.
Besides, it is very convenient to
> have all the arithmetic operations be implemented the same way, even if
there were no real overflows for division.

I agree with this for the four basic operations, but not for the remainder
operation.

By definition, the remainder is always strictly smaller (in absolute value)
than the divisor, so even if the division itself overflows, the remainder
must be representable, so technically it never overflow.

In the only actual case where the division overflow, that is Int.min / -1,
the remainder is simply 0.

For these reasons, I think it would make sense to explicitly request that
the remainder operation never traps, and remove the overflow variants.

Nicola


More information about the swift-evolution mailing list