gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 07:03:43 25 4
gpt4 key购买 nike

来自 Haskell 报告:

The quot, rem, div, and mod class methods satisfy these laws if y is non-zero:

(x `quot` y)*y + (x `rem` y) == x
(x `div` y)*y + (x `mod` y) == x

quot is integer division truncated toward zero, while the result of div is truncated toward negative infinity.

例如:

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.

Haskell 的 quotrem 旨在模仿这种行为。我可以想象在某些人为的情况下可能需要与某些 C 程序的输出兼容。

Haskell 的 divmod,以及随后的 Python 的/和 %,遵循数学家(至少是数论学家)的惯例,总是向下截断 除法(不向 0 方向——向负无穷大方向),以便余数始终为非负数。因此在 Python 中,

(-11)/5 = -3
(-11)%5 = 4
5*((-11)/5) + (-11)%5 = 5*(-3) + 4 = -11.

Haskell 的 divmod 遵循此行为。

关于haskell - quotRem 和 divMod 之间的区别什么时候有用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/339719/

25 4 0