Integral operators quot vs. div
类型类积分有两个操作:quot和div,但是在Haskell2010语言报告中没有规定它们应该做什么。假设div是整数除法,quot有什么不同,或者quot的目的是什么?你什么时候用一个,什么时候用另一个?
- 这似乎是一个有希望的链接:cdsmith.wordpress.com/2007/06/02/…
引用Haskell报告第6.4.2节:
如果y为非零,则quot、rem、div和mod类方法满足这些定律:
1 2
| (x ` quot` y )*y + (x ` rem` y ) == x
(x ` div` y )*y + (x ` mod` y ) == x |
号
quot是向零截断的整数除法,而div的结果则是向负无穷大截断。
div功能通常更自然,而quot功能与现代机器上的机器指令相对应,因此效率更高。
- +1.讨论什么时候你会喜欢一个而不是另一个
- 或者,等价地,mod的结果与除数具有相同的符号,而rem的结果与被除数具有相同的符号。
- 谢谢你的回答,特别是在人力资源部提到这一段。我只看了第九章。
- 我把它写成一个英语句子来帮助我摸索它。我相信这描述了两个方程的真实性;意义的变化是由"商"的含义决定的(即是否使用Quot或Div语义)。这里说:"余数是被除数与商和除数的乘积之差。"
在处理负数时,这两种情况不同。考虑:
在这里,-7 * 3 + 1 = -20和-6 * 3 + (-2) = -20,但是这两种方式给了你不同的答案。
另请参见:http://haskell.org/ghc/docs/latest/html/libraries/base/prelude.html
quot的定义是"整除向零截断",而div的定义是"整除向负无穷截断"。