Python modulo operation

В Python операция % осуществляет взятие по модулю или modulo operation, что сильно отличает её от аналогичной операции в Java. Если использовать её для положительных чисел, то результат одинаковый с Java, но для отрицательных чисел операции взятия остатка в Java и операция взятия по модулю в Python отличаются.

Давайте убедимся, что для отрицательных чисел результаты операции %  в Java и в Python будут разными.

Python:

Java (используем JShell):

Итак, мы имеем результат 13 % -9 == -5 для  Python и 13 % -9 == 4  для Java.

Отчего же получается такая разница в результатах? Всё дело в том, что в Java операция % возвращает остаток, а в Python операция % является реализацией modulo operation, которая имеет немного другой смысл.

Чтобы объяснить, что такое modulo operation, давайте представим часы.

Для целых чисел при вычислении результата modulo operation мы рисуем циферблат с числами до 9 и по часовой стрелке отсчитаем до 13, а там будет число 4, что и будет результатом операции 13 % 9 для Python:

Modulo operation clock

Как же быть, если мы вычисляем 13 % -9? Тогда часы становятся совсем другими:

Clock modulo negative

Как видим, результатом станет число -5, что совпадает с ответом, который даёт Python для 13 % -9.

Зачем это нужно? Я пока с этим не особо разобрался, но Modulo operation должно использоваться в криптографии, вроде как.

Рекомендую также изучить мой учебник Python 3 (пока в процессе написания)., а также мой учебник Java.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *