有人可以向我解释为什么mod(-4)3 = 2而不是1?

let*_*ter 2 haskell

我试图把我的脑袋放在这个mod功能上.直到我尝试mod (-4) 3GHCi,一切似乎都很好.有人可以向我解释为什么mod (-4) 3等于2和不等于1?这真让我困扰!

chi*_*chi 13

integer x  ... -6 -5 -4 -3 -2 -1  0  1  2  3  4  5 ...
mod x 3    ...  0  1  2  0  1  2  0  1  2  0  1  2 ...
Run Code Online (Sandbox Code Playgroud)

上面的序列满足mod (x+3) 3 = mod x 3任何方程式x.注意如何0 1 2不断重复.

请注意,在Haskell中我们都有

mod (-4) 3 == 2
rem (-4) 3 == -1
Run Code Online (Sandbox Code Playgroud)

哪里

integer x  ... -6 -5 -4 -3 -2 -1  0  1  2  3  4  5 ...
rem x 3    ...  0 -2 -1  0 -2 -1  0  1  2  0  1  2 ...
Run Code Online (Sandbox Code Playgroud)

mod x ydiv x y划分向下舍入(朝向 - 无穷大)的"余数" .相反rem x yquot x y除法向零舍入的其余部分(因此"余数"可以是负数).