Can you give an example of when this wouldn't work? I'm definitely not qualified to write a float library (lol) but I also can't think of any cases where that wouldn't work?
ceil(5) should be 5
So, if ceil(x) is implemented as round(x+0.5) then: ceil(4) = round(4.5) = 4 ceil(5) = round(5.5) = 6
The first of those is correct. The second is incorrect.
Such effects and similar should be well known to anyone taking on the responsibility to develop a floating point library.