https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79700
--- Comment #9 from Jonathan Wakely <redi at gcc dot gnu.org> --- And calling ceilf(x) doesn't give you any certainty of single precision, because if x is a double then it will still work, but you're now doing a conversion from double to float. If you already know x is a float, then std::ceil(x) is single precision. If you don't know it's a float, using ceilf doesn't change that. The only certainty you have is x will be converted to float.