haskell中负整数的除法规则是什么?
What's the division rules of negative int numbers in haskell?
在 GHCI 中,我得到了这些结果:
div (-7) ( 2) = -4
div ( 7) (-2) = -4
div (-7) (-2) = 3
mod ( 7) ( 2) = 1
mod ( 7) (-2) = -1
mod (-7) ( 2) = 1
mod (-7) (-2) = -1
和div 4 (-3)
是-2
,mod 4 (-3)
是-2
。
我不明白如何得到这些结果。有一些法律或规则吗?
正确的计算步骤是什么?
通常最好先查看文档。对于mod
函数,我们看到:
integer modulus, satisfying
(x `div` y)*y + (x `mod` y) == x
所以x `mod` y
计算为:
mod x y = x - y * (div x y) -- logically equivalent definition
并且:
integer division truncated toward negative infinity.
所以如果除法是 -3.5
,div
将 return -4
。
所以:
mod 7 2 = 7 - 2*(div 7 2) = 7 - 2 * 3 = 7 - 6 = 1
mod 7 (-2) = 7 - (-2)*(div 7 (-2)) = 7 - (-2) * (-4) = 7 - 8 = -1
mod (-7) 2 = (-7) - 2 * (div (-7) 2) = (-7) - 2 * (-4) = (-7) + 8 = 1
mod (-7) (-2) = (-7) - (-2) * (div (-7) (-2)) = -7 - (-2) * 3 = -7 + 6 = -1
在 GHCI 中,我得到了这些结果:
div (-7) ( 2) = -4
div ( 7) (-2) = -4
div (-7) (-2) = 3
mod ( 7) ( 2) = 1
mod ( 7) (-2) = -1
mod (-7) ( 2) = 1
mod (-7) (-2) = -1
和div 4 (-3)
是-2
,mod 4 (-3)
是-2
。
我不明白如何得到这些结果。有一些法律或规则吗? 正确的计算步骤是什么?
通常最好先查看文档。对于mod
函数,我们看到:
integer modulus, satisfying
(x `div` y)*y + (x `mod` y) == x
所以x `mod` y
计算为:
mod x y = x - y * (div x y) -- logically equivalent definition
并且:
integer division truncated toward negative infinity.
所以如果除法是 -3.5
,div
将 return -4
。
所以:
mod 7 2 = 7 - 2*(div 7 2) = 7 - 2 * 3 = 7 - 6 = 1
mod 7 (-2) = 7 - (-2)*(div 7 (-2)) = 7 - (-2) * (-4) = 7 - 8 = -1
mod (-7) 2 = (-7) - 2 * (div (-7) 2) = (-7) - 2 * (-4) = (-7) + 8 = 1
mod (-7) (-2) = (-7) - (-2) * (div (-7) (-2)) = -7 - (-2) * 3 = -7 + 6 = -1