私はそのmod
機能に頭を悩ませようとしています。mod (-4) 3
GHCiで試すまでは、すべて問題ないように見えました。なぜmod (-4) 3
が に等しく、2
ではないのか説明してもらえ1
ますか? それは本当に私を悩ませています!
2 に答える
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
正数の 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を引き出すことができますが、 100 に到達するために 4 を必要とする終わり。負のケースでは、-13 の 8 を「引き出す」ことができ、100 に到達するには 4 (正の数) を追加する必要があります。
したがって、あなたの場合、2 つの 3 を引き出すことができます (-6 で終了)。-4 に到達するには、残りの正の 2 が必要です。
説明するために数学者が必要になる場合があります: https://math.stackexchange.com/questions/519845/modulo-of-a-negative-number