12 ms·
But 2 mod 3 should still give the same as -1 mod 3. If the representative for the same equivalence class is allowed to be different depending on the input, you
by shikon7 3y ago
But 2 mod 3 should still give the same as -1 mod 3. If the representative for the same equivalence class is allowed to be different depending on the input, you could just as well use the number itself.
- marko_oktabyr 3y agoAt the risk of being snarky, I should certainly hope the output depends on the input. On a more serious note, there are quite reasonable properties that are satisfied by keeping the sign of the first argument as the chosen representative. In particular, for any two nonzero integers a and b, we have that: a = (a / b) * b + (a mod b) Where division should be interpreted as integer division that rounds towards zero. If a=-1 and b=3, then (a/b) would be zero which would require (a mod b) to be -1 if we want the above to hold. Also note that other rounding choices (e.g., rounding towards negative infinity) could impose (a mod b) = 2. So choosing a particular representative comes down to choosing what properties you want your function to have in relation to other arithmetic.
- oasisaimlessly 3y agoThere is no "particular representative"; every equivalence class (except 0) has two possible representatives. ... and that's exactly why the C modulo operator sucks.