Simply put, if your were representing colors with the integers "0, 1, 2, 3", you'd need to pick something to be your 0.5 case. If you pick the 1, you'd get 0.0, 0.5, 0.75, 1.0. If you pick the 2 you'd get 0.0, 0,25, 0.5, 1.0. There's no way to make those intervals equal, but integer colors can't have a decimal. The only solution would be to have eliminated the 0.5 case entirely and used even intervals, 0.333 0.666, but they chose not to do that. So color 127/255 currently evaluates to 0.5, instead of 0.498, because it's taken as 128/256. Unfortunately, adding 1 to the numerator and denominator would cause color 0 to be interpreted as 1/256 instead of 0/255