积分运算符“与div”

types类Integral有两个操作quotdiv ,但在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的定义是”整数除法向负无穷“。