Been looking through other answers and I still don’t understand the modulo for negative numbers in python
For example the answer by df
x == (x/y)*y + (x%y)
so it makes sense that (-2)%5 = -2 – (-2/5)*5 = 3
Doesn’t this (-2 – (-2/5)*5) =0 or am I just crazy?
Modulus operation with negatives values – weird thing?
Same with this
negative numbers modulo in python
Where did he get -2 from?
Lastly if the sign is dependent on the dividend why don’t negative dividends have the same output as their positive counterparts?
For instance the output of
print([8%5,-8%5,4%5,-4%5])
is
[3, 2, 4, 1]
In Python, modulo is calculated according to two rules:
(a // b) * b + (a % b) == a, anda % bhas the same sign asb.Combine this with the fact that integer division rounds down (towards −∞), and the resulting behavior is explained.
If you do
-8 // 5, you get -1.6 rounded down, which is -2. Multiply that by 5 and you get -10; 2 is the number that you’d have to add to that to get -8. Therefore,-8 % 5is 2.