积分运算符quot与div

Ing*_*ngo 51 haskell

Type类积分有两个操作quotdiv,但在哈斯克尔2010语种报告它没有规定他们应该做的事情.假设这div是不可分割的,有什么quot不同,或者目的是quot什么?你什么时候使用一个,而另一个?

aug*_*tss 102

引用Haskell报告中的第6.4.2节:

quot,rem,div,和mod类方法满足这些法规如果y为非零值:

(x `quot` y)*y + (x `rem` y) == x  
(x `div`  y)*y + (x `mod` y) == x
Run Code Online (Sandbox Code Playgroud)

quot是整数除法被截断为零,而结果div被截断为负无穷大.

div功能通常是更自然的quot功能,而功能对应于现代机器上的机器指令,因此它更有效.

  • 或者,等效地,`mod`的结果与除数具有相同的符号,而`rem`的结果与被除数具有相同的符号 (18认同)
  • 讨论你何时可能更喜欢一个而不是另一个 (4认同)

Stu*_*etz 31

处理负数时,两者表现不同.考虑:

Hugs> (-20) `divMod` 3
(-7,1)
Hugs> (-20) `quotRem` 3
(-6,-2)
Run Code Online (Sandbox Code Playgroud)

在这里,-7 * 3 + 1 = -20-6 * 3 + (-2) = -20,但这两种方式给你不同的答案.

另请参阅此处:http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html

定义为quot"整数除法截断为零",而定义为div"整数除法截断为负无穷大".