Search code examples
cmathmath.h

c integer division not returning correct quotient


my code (in the C language) is this:

avg = round((r + g + b) / 3);

r = avg;
g = avg;
b = avg;

It should do the grayscale image effect. There are no syntax errors, but apparently avg, when calculated as shown above with values r as 27, and both g and b as 28, avg finds it to be 27. I know it is 27.66666... and when rounded that is 28. if you can either-or/both explain to me why this happens with round(), and/or give me a solution, it is really appreciated.


Solution

  • Assuming that r, g, and b have integer types, the expression (r + g + b) / 3 performs integer division because all operands have integer type. This means that any fractional part of the division gets truncated.

    Change the expression to this:

    (r + g + b) / 3.0
    

    The constant 3.0 has type double, so this will perform floating point division. Then rounding the result of this expression will give you the desired result.