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

时间:2015-10-22 16:42:59

标签: haskell

我正试图绕过mod函数。直到我在GHCi中尝试mod (-4) 3之前,一切似乎都很好。有人可以向我解释为什么mod (-4) 3等于2而不是1?这真让我烦恼!

2 个答案:

答案 0 :(得分: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 ...

上述序列满足任何mod (x+3) 3 = mod x 3的等式x。请注意0 1 2如何不断重复。

请注意,在Haskell中我们都有

mod (-4) 3 == 2
rem (-4) 3 == -1

,其中

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 ...

mod x y是"余数" div x y的分割向下舍入(朝向-infinity)。相反,rem x yquot x y的剩余部分,其中除法被舍入为零(因此"余数"可以是负数)。

答案 1 :(得分:1)

它与正数的mod相同。在算术模c中,我们试图将任何x表示为qc + r,其中r必须是非负整数。

为什么我们不用示例来测试它?

取-100 mod 8 = 4。这是因为8⋅-13 = -104。剩下的就是4。

我会尝试解释......我的方式: 积极的qc + r意味着100 mod 8 = 4,因为你可以把它表示为8 * 12 + 4意味着你可以从它中拉出12个8,但是你需要按顺序结束4个在负面的情况下你可以"拉出" -13 8' s,那么你需要加上4(正数)才能达到100。

所以在你的情况下,你可以拿出两个3(结束于-6)然后你需要正面2剩下来达到-4

可能需要数学家来解释: https://math.stackexchange.com/questions/519845/modulo-of-a-negative-number