来自哈斯克尔报告:
quot、rem、div 和 mod 类
如果 y 是,方法满足这些定律
非零:
(x `quot` y)*y + (x `rem` y) == x
(x `div` y)*y + (x `mod` y) == x
quot
整数除法是否被截断
趋于零,而结果div
被截断为负无穷大。
例如:
Prelude> (-12) `quot` 5
-2
Prelude> (-12) `div` 5
-3
有哪些例子可以说明结果截断方式之间的差异很重要?
许多语言都有“mod”或“%”运算符,用于给出除法后的余数并截断为 0;例如 C、C++ 和 Java,可能还有 C#,会说:
(-11)/5 = -2
(-11)%5 = -1
5*((-11)/5) + (-11)%5 = 5*(-2) + (-1) = -11.
哈斯克尔的quot
and rem
旨在模仿这种行为。我可以想象在某些人为的情况下可能需要与某些 C 程序的输出兼容。
哈斯克尔的div
and mod
,以及随后的 Python 的 / 和 %,遵循数学家(至少是数论学家)的惯例,总是截断down除法(不是向 0 方向——向负无穷大方向),这样余数总是非负的。因此在Python中,
(-11)/5 = -3
(-11)%5 = 4
5*((-11)/5) + (-11)%5 = 5*(-3) + 4 = -11.
哈斯克尔的div
and mod
遵循这种行为。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)