On Friday, 24 June 2016 at 20:43:38 UTC, deadalnix wrote:
On Friday, 24 June 2016 at 20:33:45 UTC, Andrei Alexandrescu
wrote:
In a checked environment, division may "overflow", e.g. -6 /
2u must be typed as uint but is not representable properly one.
How about remainder? I suppose one can make the argument that
remainder should never overflow (save for rhs == 0), because
it could be defined with either a positive or negative
denominator (which is not part of the result).
What's the most reasonable behavior?
Andrei
Most reasonable is
numerator = quotient * divisor + remainder
Which means it can be negative.
This proves nothing.
Wiki:
For a ***positive integer n***, two integers a and b are said to
be congruent modulo n, written:
a ≡ b ( mod n ) , {\displaystyle a\equiv b{\pmod {n}},\,}
a\equiv b{\pmod {n}},\,
if their difference a − b is an integer multiple of n (or n
divides a − b). The number n is called the modulus of the
congruence.
For any "negative" remainder, all one has to do is subtract one
from the divisor:
quotient*(divisor - 1 + 1) + remainder
= quotient*new_divisor + pos_remainder
where new_divisor = divisor - 1, pos_remainder = quotient +
remainder
There are problems with allowing the remainder to be negative and
it is generally best to restrict it to positive values.
e.g., 129 = 2*52 + 25 OR 3*52 - 27.
In the second case, we have 129/52i = 3? Basically by restricting
to positive integers, we have a more natural interpretation and
relationship to floor and ceil functions and we don't have to
worry about it being negative(think of using in in an array
indexing scheme),