Modulo for negative dividends in Python

modulo, python

Solution

In Python, modulo is calculated according to two rules:

- `(a // b) * b + (a % b) == a`, and

- `a % b` has the same sign as `b`.

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 % 5` is 2.

Problem

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] ```

Original source

Related problems