quotRem 和 divMod 之间的区别什么时候有用?

2024-01-25

来自哈斯克尔报告:

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(使用前将#替换为@)

quotRem 和 divMod 之间的区别什么时候有用? 的相关文章

随机推荐