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

Total Post:89

 1414  View(s)
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

    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)


    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. 



Enter your email address here always to be updated. We promise not to spam!