编程语言中,取余和取模的区别到底是什么?

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

    通常,取模运算也叫取余运算,它们返回结果都是余数.rem(取余)和mod(取模)唯一的区别在于:
     当x和y的正负号一样的时候,两个函数结果是等同的;
     当x和y的符号不同时,rem函数结果的符号和x的一样,而mod和y一样。
 

例子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)=1

例子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)=1

例子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)=-1

例子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)=-1

 

本文为博主原创文章,转载请注明出处!

https://my.oschina.net/u/3375733/blog/

转载于:https://my.oschina.net/u/3375733/blog/1551247

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值