取余,遵循尽可能让商向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