Пожалуйста, объясните, почему:
print ((- 1) % (-109)) # prints -1
print (1 % (-109)) # prints -108
Почему результат отрицательный, если условия формулировки остатка 0 ‹= r ‹ b
Пожалуйста, объясните, почему:
print ((- 1) % (-109)) # prints -1
print (1 % (-109)) # prints -108
Почему результат отрицательный, если условия формулировки остатка 0 ‹= r ‹ b
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