3) I agree it is better. It will save you the trouble for all kind of bugs. But memory might be a problem since he is mentioning millions of floats. And I mention the cache because for the Main Memory millions of floats is nothing. But for the cache memory it is.
But I ll stick to 1). It is not a good idea to make premature optimizations. But that is what he asked. He might be in the final state for what I know. I don't say it will be faster or slower. I say that it will be faster IF he is right about the way he thinks it will be used. That way is for the Bitmap to be in the cache memory so he can reuse it right away.
If you store float numbers in the Bitmap, load another Bitmap, do a lot of things, then store colors in the first Bitmap, it might not be present in the cache, so you won't gain anything. You might as well have a float Bitmap and a color Bitmap and just load whichever you need. If you use it right away though it might make sense to do it this way.
Other solutions that require multiplying/dividing by a number will possibly have an error due to rounding. So it won't be a good idea.
And if the float is 8 bytes instead, for example, then you can do the same thing, as long as your COLOR class will have space to store it. If not then you cannot do it.