我试图把头放在这个mod
功能上。在我尝试mod (-4) 3
GHCi 之前,一切似乎都很好。有人可以向我解释为什么mod (-4) 3
等于2
而不是1
吗?真的很困扰我!
问问题
597 次
2 回答
14
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
是除法向下舍入的“余数” (朝向-无穷大)。取而代之rem x y
的是quot x y
除法向零舍入的余数(因此“余数”可以为负数)。
于 2015-10-22T16:49:43.077 回答
2
它与正数的 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 才能达到 100。在负数情况下,您可以“拉出”-13 个 8,然后您需要加 4(正数)才能达到 100。
因此,在您的情况下,您可以取出两个 3(以 -6 结尾),然后您需要剩余的正 2 才能达到 -4
可能需要数学家来解释: https ://math.stackexchange.com/questions/519845/modulo-of-a-negative-number
于 2015-10-22T16:46:01.433 回答