I often need to floor or ceil a CGFloat
to an int
, for calculation of an array index.
The problem I permanently see with floorf(theCGFloa
There are a couple misconceptions in your question.
what if my CGFloat is 2.0f but internally it is represented as 1.999999999999f
can't happen; 2.0, like all reasonably small integers, has an exact representation in floating-point. If your CGFloat
is 2.0f
, then it really is 2.0.
something like 2.0 would never accidentally get ceiled to 2
The ceiling of 2.0 is 2; what else would it possibly be?
I think the question that you're really asking is "suppose I do a calculation that produces an inexact result, which mathematically should be exactly 2.0, but is actually slightly less; when I apply floor
to that value, I get 1.0 instead of 2.0--how do I prevent this?"
That's actually a fairly subtle question that doesn't have a single "right" answer. How have you computed the input value? What are you going to do with the result?