In C# integer arithmetic, does a/b/c always equal a/(b*c)?

Total Post:89

Points:629
C# 
C#
 1462  View(s)
Ratings:
Rate this:
Hi Expert,

Let a, b and c be non-large positive integers. Does a/b/c always equal a/(b * c) with C# integer arithmetic? For me, in C# it looks like:

int a = 5126, b = 76, c = 14;
int x1 = a / b / c;
int x2 = a / (b * c);

So my question is: does x1 == x2 for all a, b and c?

Thanks in advance. 
  1. Post:604

    Points:4228
    Re: In C# integer arithmetic, does a/b/c always equal a/(b*c)?

    Hi Takeshi,


    Let \ denote integer division (the C# / operator between two ints) and let / denote usual math division. Then, if x,y,z are positive integers and we are ignoring overflow,

    (x \ y) \ z
        = floor(floor(x / y) / z)      [1]
        = floor((x / y) / z)           [2]
        = floor(x / (y * z))
        = x \ (y * z)

    where

    a \ b = floor(a / b)

    The jump from line [1] to line [2] above is explained as follows. Suppose you have two integers a and b and a fractional number f in the range [0, 1). It is straightforward to see that

    floor(a / b) = floor((a + f) / b)  [3]

    If in line [1] you identify a = floor(x / y), f = (x / y) - floor(x / y), and b = z, then [3] implies that [1] and [2] are equal.

    You can generalize this proof to negative integers (still ignoring overflow), but I'll leave that to the reader to keep the point simple.

    Thanks in advance. 

Answer