取余:rem(a,b) = a - b * fix(a / b)
取模:mod(a,b) = a - b * floor(a / b)
注:fix()
函数的取值是向 0 方向舍入取整,floor()
函数的取值是向负无穷方向舍入取整,且 b ≠ 0
。
例子 1:
rem(7,3) = 7 - 3 * fix(7 / 3) = 7 - 3 * 2 = 1 // 7 ÷ 3 = 2.33,向 0 方向舍入取整得 2
mod(7,3) = 7 - 3 * floor(7 / 3) = 7 - 3 * 2 = 1 // 7 ÷ 3 = 2.33,向负无穷方向舍入取整得 2
rem(-7,-3) = (-7) - (-3) * fix(-7 / -3) = (-7) - (-3) * fix(7 / 3) = (-7) - (-3) * 2 = (-7) + 6 = -1
mod(-7,-3) = (-7) - (-3) * mod(7 / 3) = (-7) - (-3) * 2 = -1
所以说,整数 a 和整数 b 如果符号相同,余数和模数相同。
注:(-7 / -3) = 7 / 3
,(-7) / 3 = (-1) * (7 / 3)
例子 2:
rem(-7,3) = (-7) - 3 * fix(-7 / 3) = (-7) - 3 * (-2) = -1 // (-7) ÷ 3 = -2.33,向 0 方向舍入取整得 -2
mod(-7,3) = -7 - 3 * floor(-7 / 3) = -7 - 3 * (-3) = 2 // -7 ÷ 3 = -2.33,向负无穷方向舍入取整得 -3
所以说,整数 a 和整数 b 如果符号不同时,余数和模数不相同。