你能告诉我多少钱(-2) % 5
?根据我的Python解释器是3,但你有一个明智的解释吗?
我读过在某些语言中,结果可能与机器有关,但我不确定.
顺便说一句:大多数编程语言都不同意Python并给出结果-2
.根据模数的解释,这是正确的.然而,最常见的数学定义表明a和b的模数是a/b除法的(严格为正)余数r.更准确地说,根据定义,0 <= r < b.
负面模数运算的结果似乎是编程语言依赖,这里是一个列表http://en.wikipedia.org/wiki/Modulo_operation
你的Python解释器是正确的.计算模量的一种(愚蠢的)方法是减去或加上模数,直到结果值在0和(模数-1)之间.
例如:13 mod 5 =(13-5)mod 5 =(13-10)mod 5 = 3
或者在你的情况下:-2 mod 5 =( - 2 + 5)mod 5 = 3
就像文档在二进制算术运算中所说的那样,Python保证:
整数除法和模运算符通过以下标识连接:
x == (x/y)*y + (x%y)
.整数除法和模数也与内置函数divmod()连接:divmod(x, y) == (x/y, x%y)
.
真的,
>>> divmod(-2, 5) (-1, 3).
另一种可视化此方法均匀性的方法是计算divmod
一小段数字:
>>> for number in xrange(-10, 10): ... print divmod(number, 5) ... (-2, 0) (-2, 1) (-2, 2) (-2, 3) (-2, 4) (-1, 0) (-1, 1) (-1, 2) (-1, 3) (-1, 4) (0, 0) (0, 1) (0, 2) (0, 3) (0, 4) (1, 0) (1, 1) (1, 2) (1, 3) (1, 4)