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