zoukankan      html  css  js  c++  java
  • 关于取模运算的小记

    首先考虑函数:

    floor(x)  向下取整
    ceil(x)  向上取整
    round(x)  四舍五入到最近的整数
    fix(x)  向零取整

    通常情况下取模运算(mod)和求余(rem)运算被混为一谈,因为在大多数的编程语言里,都用'%'符号表示取模或者求余运算。

    在这里要提醒大家要十分注意当前环境下'%'运算符的具体意义,因为在有负数存在的情况下,两者的结果是不一样的

    对于整型数a,b来说,取模运算或者求余运算的方法都是:
    1.求整数商: c = a / b 
    2.计算模或者数: r = a - c * b 
     
    求模运算和求余运算在第一步不同:
      求余运算在取c的值时,向0方向舍入(fix()函数);
      取模运算在计算c的值时,向负无穷大方向舍入(floor()函数).
     
     

    样例:

    a b C语言:a%b (求余) Python Shell: a%b(取模)
    -3 -5 -3 -3
    -3 4 -3 1
    -3 2 -1 1
    -1 6 -1 5
    -4 -3 -1 -1
    2 4 2 2
    5 3 2 2
    4 -7 4 -3
    4 -3 1 -2
    -6 -5 -1 -1

     
    可以看出,如果想将求余运算转换为取模运算,如此转换:
      mod(a,b) = rem ( rem(a,b) + b , b )
     
    证明:
    由于rem(a,b) = a - b * fix(a/b)
    则rem ( rem(a,b) + b , b ) = ( rem(a,b) + b ) - b * fix( (rem(a,b) + b) / b )
                 = a - b * fix(a/b) + b - b * fix( ( a - b * fix(a/b) + b ) / b )
                 = a - b * fix(a/b) + b - b * fix( a/b - fix(a/b) + 1 )
     
    当a/b >= 0时:      = a - b * fix(a/b) = a - b * floor(a/b)
    当a/b < 0时:      = a - b * fix(a/b) + b = a - b * ( fix(a/b) - 1 ) = a - b * floor(a/b)
  • 相关阅读:
    TTL电平和CMOS电平总结
    掩码
    关于Autosar中DCM(14229UDS)模块的理解
    Diagnostic Trouble Code诊断故障码
    eclipse搭建android开发环境
    在ubuntu下安装zookeeper
    redis的windows版本下载地址及windows的客户端工具
    最简单的启动并连接一个redis的docker容器
    转:Redis介绍及常用命令大全
    redis常用命令
  • 原文地址:https://www.cnblogs.com/dilthey/p/8306069.html
Copyright © 2011-2022 走看看