May 14, 2023

Оператор Остаток от деления в Python

Попробую также для себя описать, что происходит при выполнении оператора Остаток от деления (%), так легче понять и запомнить.

Возьмем эти числа: 19 и 5. Когда они оба положительные, все легко. Когда появляется минус, появляются проблемы. Давайте разбираться.

Сначала вспомним целочисленное деление:

а) 19 // 5 = 3, так как 19 / 5 = 3.8, округляем в меньшую сторону, или вниз, получается 3.
б) 19 // -5 = -4, так как 19 / - 5 = -3.8, округляем в меньшую сторону, или вниз, получается -4.
в) -19 // 5 = -4, так как -19 / 5 = -3.8, округляем в меньшую сторону, или вниз, получается -4.
г) -19 // -5 = 3, так как -19 / -5 = 3.8, округляем в меньшую сторону, или вниз, получается 3.

Существует формула для нахождения остатка:

a = b * q + r

где a — делимое, b — делитель, q — неполное частное (оно же целочисленное деление), r — остаток.

И тут наступает важный момент. С точки зрения математики, остаток от деления всегда неотрицателен. Но в компьютерной арифметике, как оказалось, зачастую отступают от математического определения деления с отстатком. Тут решающее значение получает вопрос, как округлять дробное частное q при целочисленном делении.

В языке Python выбрали вариант округления вниз (floor), который рассмотрели в этом посте. Именно это решение и определяет, каким получается остаток.

Давайте подставим в приведенную формулу известные нам значения:

а) 19 = 5 * 3 + r
б) 19 = (-5) * (-4) + r
в) -19 = 5 * (-4) + r
г) -19 = (-5) * 3 + r

Теперь посчитаем:

а) r = 19 - 5 * 3 = 4
б) r = 19 - (-5) * (-4) = 19 - 20 = -1
в) r = -19 - 5 * (-4) = -19 - (-20) = -19 + 20 = 1
г) r = -19 - (-5) * 3 = -19 - (-15) = -19 + 15 = -4

Таким образом, оператор Остаток от деления в Python будет выдавать такой результат:

а) 19 % 5 = 4
б) 19 % -5 = -1
в) -19 % 5 = 1
г) -19 % -5 = -4

Разобраться со всем этим мне помогло вот это видео.