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.
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.