Haskell中`mod`和`rem`的区别
Haskell中`mod`和`rem`的区别
在Haskell中,mod
和rem
之间到底有什么区别呢?
两者似乎都会得出相同的结果。
*Main> mod 2 3 2 *Main> rem 2 3 2 *Main> mod 10 5 0 *Main> rem 10 5 0 *Main> mod 1 0 *** Exception: divide by zero *Main> rem 1 0 *** Exception: divide by zero *Main> mod 1 (-1) 0 *Main> rem 1 (-1) 0
admin 更改状态以发布 2023年5月21日
是的,这些函数的行为不同。 如官方文档所定义:
quot
是向零取整的整数除法
rem
是整数余数,满足:
(x `quot` y)*y + (x `rem` y) == x
div
是向负无穷取整的整数除法
mod
是整数模数,满足:
(x `div` y)*y + (x `mod` y) == x
当使用一个负数作为第二个参数并且结果不为零时,您可以真正注意到差异:
5 `mod` 3 == 2 5 `rem` 3 == 2 5 `mod` (-3) == -1 5 `rem` (-3) == 2 (-5) `mod` 3 == 1 (-5) `rem` 3 == -2 (-5) `mod` (-3) == -2 (-5) `rem` (-3) == -2