Остаток в целочисленном делении отрицателен в Python - PullRequest
0 голосов
/ 21 февраля 2019

Пожалуйста, объясните, почему:

print ((- 1) % (-109)) # prints -1
print (1 % (-109)) # prints -108

Почему результат отрицательный, если условия формулировки остатка 0 <= r <b </p>

1 Ответ

0 голосов
/ 21 февраля 2019

c = a mod n - это то же самое, что сказать a = bn + c = (-b) (- n) + c

Если у нас есть c = -1 mod -109, то же самоекак говорится:

-1 = b*(-109) + c for some positive c.

-1 = 0 * (-109) + (-1) so c = -1 OR c = 108 if -1 = 1*(-109) + 108

Для второго случая аналогично:

1 = b(-109) + c = -b(109) + c

С109> 1

1 = 0(-109) + 1 so c = 1 OR 1 = -0(109) + (-108)

Математически все они эквивалентны, и выбор между ними во многом зависит от реализации со стороны Python, и веская причина поддерживается математической теорией.

Более подробное объяснение Гвидо Ван Россума находится по адресу http://python -history.blogspot.com / 2010/08 / why-pythons-integer-Division-floors.html

...