关于取模运算的小记

首先考虑函数:

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)
原文地址:https://www.cnblogs.com/dilthey/p/8306069.html