Home > DeveloperSection > Forums > In C# integer arithmetic, does a/b/c always equal a/(b*c)?
Takeshi Okada
Takeshi Okada

Total Post:89

Points:629
Posted on    June-06-2013 2:49 AM

 C# C# 
Ratings:


 1 Reply(s)
 923  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. 


AVADHESH PATEL

Total Post:604

Points:4228
Posted on    June-06-2013 8:27 AM

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. 

Don't want to miss updates? Please click the below button!

Follow MindStick