积分运算符“与div”
types类Integral有两个操作quot
和div
,但在Haskell 2010语言报告中没有指定他们应该做什么。 假设div
是整数除法,那么换句话说, div
,“ div
quot
的目的是什么? 你什么时候使用一个,什么时候使用另一个?
引用Haskell报告中的第6.4.2节:
如果y不为零,则“rem”,“div”和mod类方法满足这些定律:
(x 'quot' y)⋆y + (x 'rem' y) == x (x 'div' y)⋆y + (x 'mod' y) == x
“quot”是整数除法截至零,而“div”的结果被截断为负无穷。
div
函数往往是更自然的使用,而quot
函数对应于现代机器上的机器指令,所以它更有效率。
处理负数时,两者performance不同。 考虑:
Hugs> (-20) `divMod` 3 (-7,1) Hugs> (-20) `quotRem` 3 (-6,-2)
在这里, -7 * 3 + 1 = -20
和-6 * 3 + (-2) = -20
,但这两种方式给你不同的答案。
另请参阅: http : //haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html
“定义为quot
整数除法截至零“,而div
的定义是”整数除法向负无穷“。