请说明原因:
print ((- 1) % (-109)) # prints -1
print (1 % (-109)) # prints -108
如果余数的用语项为0 <= r ,为什么结果为负
答案 0 :(得分:1)
c = 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的实现问题,而数学理论有充分的理由。
Guido Van Rossum的更详细解释在http://python-history.blogspot.com/2010/08/why-pythons-integer-division-floors.html