zoukankan      html  css  js  c++  java
  • 编程语言中,取余和取模的区别到底是什么?

    作者:小婷子
    链接:https://www.zhihu.com/question/30526656/answer/160437482
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    【取模和求余原理】

    定义:a = bq + r 且 0 <= |r| < |b|。

    题目:给定a和b,要求mod(a,b)和rem(a,b);

    分析:对于满足a = bq + r 且 0 <= |r| < |b|条件的数据,如果a不能被b整除,有两对(q,r),其中一对中r为正数(正余数),另一对中r为负数(负余数)。

    结果:取模的定义有很多种,不同语言的取模定义可能不一样,最常见的是:q更趋近无穷小(负无穷)时的r,即mod(a,b);

    求余:q更趋近0时的r,即rem(a,b);


    【举例】

    例子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


    【更多】

    1、其他的取模运算,例如r必须和a负号相同等等,原理类似,根据条件取模时对候选组进行选择,因此不再展开。

    2、取模在灰度方案和abtest中经常用到(对随机算法要求不高)。



    翻了下百度计算器,对了下答案,米问题,交卷~


    【参考】

    chensidney‘s blog

    MOD(计算机语言取模运算符)_百度百科

    取模运算_百度百科

    Remainder - Wikipedia

     
  • 相关阅读:
    測试AtomicInteger与普通int值在多线程下的递增操作
    《漫画线性代数》读书笔记 矩阵
    Android下雪动画的实现
    Live555实战之交叉编译live555共享库
    JAVA_SE基础——24.面向对象的内存分析
    Linux下利用signal函数处理ctrl+c等信号
    tomcat6url请求400错误(%2F与%5C)
    python的交互式shell-ipython体验
    1906月读书清单
    Linux对变量的截取替换
  • 原文地址:https://www.cnblogs.com/duhuo/p/6657518.html
Copyright © 2011-2022 走看看