取餘,遵循儘可能讓商向0靠近的原則。
取模,遵循儘可能讓商向負無窮靠近的原則。
如圖所示:
符號相同時,兩者不會衝突。
比如,7/3=2.3,產生了兩個商2和3
7=3x2+1 或 7=3x3+(-2)。
因此,7rem3=1,7mod3=1。
符號不同時,兩者會產生衝突。
比如,7/(-3)=-2.3,產生了兩個商-2和-3
7=(-3)x(-2)+1或7=(-3)x(-3)+(-2)。
因此,7rem(-3)=1,7mod(-3)=(-2).
爲什麼遵循的是這樣的原則?
在matlab中,關於取餘和取模是這麼定義的:
當y≠0時:
取餘:rem(x,y)=x-y.xfix(x./y)
取模:mod(x,y)=x-y.xfloor(x./y)
其中,fix()函數是向0取整,floor()函數是向負無窮取整。
以前邊的運算爲例:7/(-3)=-2.3,在這個運算中,x爲7,y爲-3,分別調用fix()和floor()兩個函數,得到結果是:
fix(-2.3)=-2
floor(-2.3)=-3,
rem(7,-3)=1,mod(7,-3)=-2