取余,遵循尽量让商向0靠近的原则取模,遵循尽量让商向负无穷靠近的原则符号相同时,二者不会冲突。
好比,7/3=2.3,产生了两个商2和37=3*2+1或7=3*3+(-2)。所以,7rem3=1,7mod3=1。符号不一样时,二者会产生冲突。
好比,7/(-3)=-2.3,产生了两个商-2和-37=(-3)*(-2)+1或7=(-3)*(-3)+(-2)。所以,7rem(-3)=1,7mod(-3)=(-2)函数
解释:为何遵循的是这样的原则?在matlab中,关于取余和取模是这么定义的:
当y≠0时:取余:rem(x,y)=x-y.*fix(x./y) 取模:mod(x,y)=x-y.*floor(x./y)其中,
fix()函数是向0取整,
floor()函数是向负无穷取整之前边的运算为例:7/(-3)=-2.3,
在这个运算中,x为7,y为-3,分别调用fix()和floor()两个函数,
获得结果是:fix(-2.3)=-2floor(-2.3)=-3因此,rem(7,-3)=1,mod(7,-3)=-2.net
一般,取模运算也叫取余运算,它们返回结果都是余数.rem(取余)和mod(取模)惟一的区别在于:
当x和y的正负号同样的时候,两个函数结果是等同的;
当x和y的符号不一样时,rem函数结果的符号和x的同样,而mod和y同样。
blog
例子1:
mod(7,3)=1,rem(7,3)=1
候选组1:(q1,r1)=(2,1) 7=2*3+1
候选组2:(q2,r2)=(3,-2) 7=3*3+(-2)
取模:由于q1比q2更加趋近于负无穷,因此取(q1,r1)=(2,1),mod(7,3)=1
求余:由于q1比q2更加趋近于0,因此取(q1,r1)=(2,1),rem(7,3)=1rem
例子2:
mod(7,-3)=-2,rem(7,-3)=1
候选组1:(q1,r1)=(-2,1) 7=(-2)*(-3)+1
候选组2:(q2,r2)=(-3,-2) 7=(-3)*(-3)+(-2)
取模:由于q2比q1更加趋近于负无穷,因此取(q2,r2)=(-3,-2),mod(7,-3)=-2
求余:由于q1比q2更加趋近于0,因此取(q1,r1)=(-2,1),rem(7,3)=1d3
例子3:
mod(-7,3)=2,rem(-7,3)=-1
候选组1:(q1,r1)=(-2,-1) -7=(-2)*3+(-1)
候选组2:(q2,r2)=(-3,2) -7=(-3)*3+2
取模:由于q2比q1更加趋近于负无穷,因此取(q2,r2)=(-3,2),mod(7,-3)=2
求余:由于q1比q2更加趋近于0,因此取(q1,r1)=(-2,-1),rem(7,-3)=-1matlab
例子4:
mod(-7,-3)=-1,rem(-7,-3)=-1
候选组1:(q1,r1)=(2,-1) -7=2*(-3)+(-1)
候选组2:(q2,r2)=(3,2) -7=3*(-3)+2
取模:由于q1比q2更加趋近于负无穷,因此取(q1,r1)=(2,-1),mod(7,-3)=-1
求余:由于q1比q2更加趋近于0,因此取(q1,r1)=(2,-1),rem(7,-3)=-1d3
本文为博主原创文章,转载请注明出处!ps
https://my.oschina.net/u/3375733/blog/ab