Remarks on the division of integers
SOL 2025-12-16

References
+ https://en.wikipedia.org/wiki/Modulo
+ Boute, The Euclidean definition of the functions div and mod, ACM TOPLAS 14.2 April 1992, pp. 127-144
+ https://en.wikipedia.org/wiki/Rounding


Basic relations
  a, b, q, r: INTEGER, b # 0
  q := a DIV b
  r := a MOD b        [ := a - b * q ]
  a = b * q + r
  |r| < |b|

Notations
  a/b : the real quotient
  floor(x) : greatest integer less than or equal to (real number) x
  ceil(x) : least integer greater than or equal to (real number) x
  sign(x) : -1 for x < 0, 0 for x = 0, +1 for x > 0
  round(x) : nearest integer, half to even


(T) - truncated division
  q = trunc( a/b )
  + integral part of a/b, rounding towards zero
  + sign(r) = sign(a)  (if r # 0 )
  + symmetric: (-a) DIV b = a DIV (-b) = - ( a DIV b )  [ ==> (-a) DIV (-b) = a DIV b ]
  + examples:
      3  DIV   2  =  1,   3  MOD   2  =  1, since  3 =   2  *   1  + 1
    (-3) DIV   2  = -1, (-3) MOD   2  = -1, since -3 =   2  * (-1) - 1
      3  DIV (-2) = -1,   3  MOD (-2) =  1, since  3 = (-2) * (-1) + 1
    (-3) DIV (-2) =  1, (-3) MOD (-2) = -1, since -3 = (-2) *   1  - 1
  + implemented in x86


(F) - floored division
  q = floor( a/b )
  + rounding down (towards -infinity)
  + sign(r) = sign(b)  (if r # 0 )
  + asymmetric
  + examples:
      3  DIV   2  =  1,   3  MOD   2  =  1, since  3 =   2  *   1  + 1
    (-3) DIV   2  = -2, (-3) MOD   2  =  1, since -3 =   2  * (-2) + 1
      3  DIV (-2) = -2,   3  MOD (-2) = -1, since  3 = (-2) * (-2) - 1
    (-3) DIV (-2) =  1, (-3) MOD (-2) = -1, since -3 = (-2) *   1  - 1
  + promoted by Knuth


(E) - Euclidean division
  + sign(r) >= 0   [ 0 <= r < |b| ]
  + asymmetric
  + examples:
      3  DIV   2  =  1,   3  MOD   2  =  1, since  3 =   2  *   1  + 1
    (-3) DIV   2  = -2, (-3) MOD   2  =  1, since -3 =   2  * (-2) + 1
      3  DIV (-2) = -1,   3  MOD (-2) =  1, since  3 = (-2) * (-1) + 1
    (-3) DIV (-2) =  2, (-3) MOD (-2) =  1, since -3 = (-2) *   2  + 1
  + promoted by Boute


(C) - ceiling division
  q = ceil( a/b )
  + rounding up (towards +infinity)
  + sign(r) = - sign(b)  (if r # 0 )
  + asymmetric
  + examples:
      3  DIV   2  =  2,   3  MOD   2  = -1, since  3 =   2  *   2  - 1
    (-3) DIV   2  = -1, (-3) MOD   2  = -1, since -3 =   2  * (-1) - 1
      3  DIV (-2) = -1,   3  MOD (-2) =  1, since  3 = (-2) * (-1) + 1
    (-3) DIV (-2) =  2, (-3) MOD (-2) =  1, since -3 = (-2) *   2  + 1


(R) - rounded division
  q = round( a/b )
  + rounding to nearest, half to even
  + -|b|/2 <= r <= |b|/2
  + symmetric: (-a) DIV b = a DIV (-b) = - ( a DIV b )  [ ==> (-a) DIV (-b) = a DIV b ]
  + examples:
      3  DIV   2  =  2,   3  MOD   2  = -1, since  3 =   2  *   2  - 1
    (-3) DIV   2  = -2, (-3) MOD   2  =  1, since -3 =   2  * (-2) + 1
      3  DIV (-2) = -2,   3  MOD (-2) = -1, since  3 = (-2) * (-2) - 1
    (-3) DIV (-2) =  2, (-3) MOD (-2) =  1, since -3 = (-2) *   2  + 1
  + defined by IEEE


(Ro) - rounded division, variant o
  + rounding to nearest, half to odd
  + -|b|/2 <= r <= |b|/2
  + symmetric: (-a) DIV b = a DIV (-b) = - ( a DIV b )  [ ==> (-a) DIV (-b) = a DIV b ]
  + examples:
      3  DIV   2  =  1,   3  MOD   2  =  1, since  3 =   2  *   1  + 1
    (-3) DIV   2  = -1, (-3) MOD   2  = -1, since -3 =   2  * (-1) - 1
      3  DIV (-2) = -1,   3  MOD (-2) =  1, since  3 = (-2) * (-1) + 1
    (-3) DIV (-2) =  1, (-3) MOD (-2) = -1, since -3 = (-2) *   1  - 1


(Rz) - rounded division, variant z
  + rounding to nearest, half towards zero
  + -|b|/2 <= r <= |b|/2
  + symmetric: (-a) DIV b = a DIV (-b) = - ( a DIV b )  [ ==> (-a) DIV (-b) = a DIV b ]
  + examples:
      3  DIV   2  =  1,   3  MOD   2  =  1, since  3 =   2  *   1  + 1
    (-3) DIV   2  = -1, (-3) MOD   2  = -1, since -3 =   2  * (-1) - 1
      3  DIV (-2) = -1,   3  MOD (-2) =  1, since  3 = (-2) * (-1) + 1
    (-3) DIV (-2) =  1, (-3) MOD (-2) = -1, since -3 = (-2) *   1  - 1


(Rd) - rounded division, variant d
  + rounding to nearest, half down
  + -|b|/2 <= r <= |b|/2
  + asymmetric
  + examples:
      3  DIV   2  =  1,   3  MOD   2  =  1, since  3 =   2  *   1  + 1
    (-3) DIV   2  = -2, (-3) MOD   2  =  1, since -3 =   2  * (-2) + 1
      3  DIV (-2) = -2,   3  MOD (-2) = -1, since  3 = (-2) * (-2) - 1
    (-3) DIV (-2) =  1, (-3) MOD (-2) = -1, since -3 = (-2) *   1  - 1


(Ru) - rounded division, variant u
  + rounding to nearest, half up
  + -|b|/2 <= r <= |b|/2
  + asymmetric
  + examples:
      3  DIV   2  =  2,   3  MOD   2  = -1, since  3 =   2  *   2  - 1
    (-3) DIV   2  = -1, (-3) MOD   2  = -1, since -3 =   2  * (-1) - 1
      3  DIV (-2) = -1,   3  MOD (-2) =  1, since  3 = (-2) * (-1) + 1
    (-3) DIV (-2) =  2, (-3) MOD (-2) =  1, since -3 = (-2) *   2  + 1


don't mention "away from zero"...


