当前位置:  开发笔记 > 编程语言 > 正文

具有负值的模数运算 - 奇怪的是什么?

如何解决《具有负值的模数运算-奇怪的是什么?》经验,为你挑选了4个好方法。

你能告诉我多少钱(-2) % 5?根据我的Python解释器是3,但你有一个明智的解释吗?

我读过在某些语言中,结果可能与机器有关,但我不确定.



1> Konrad Rudol..:

顺便说一句:大多数编程语言都不同意Python并给出结果-2.根据模数的解释,这是正确的.然而,最常见的数学定义表明ab的模数是a/b除法的(严格为正)余数r.更准确地说,根据定义,0 <= r < b.



2> martinatime..:

负面模数运算的结果似乎是编程语言依赖,这里是一个列表http://en.wikipedia.org/wiki/Modulo_operation



3> Tnilsson..:

你的Python解释器是正确的.计算模量的一种(愚蠢的)方法是减去或加上模数,直到结果值在0和(模数-1)之间.

例如:13 mod 5 =(13-5)mod 5 =(13-10)mod 5 = 3

或者在你的情况下:-2 mod 5 =( - 2 + 5)mod 5 = 3



4> tzot..:

就像文档在二进制算术运算中所说的那样,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)

推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有