HACKER Q&A
📣 ur-whale

Guess the output of these 3 lines of C++


Today, a long-held assumption of mine was shattered.

To wit: can you guess the output of this code?

And if you can, would love to understand why my assumption was obviously wrong:

    #include 
    #include 

    int main() {
      auto x = -1e-8f;
      printf("%.40f\n", (x - floorf(x)));
      return 0;
    }
Also, note that of all the 4B+ possible floats, there are over 800M of them that all break the assumption in the exact same manner.

a) you learn new stuff every day

b) floats are a bottomless pit of ugly corner cases

[EDIT]: for those wondering, the assumption was that the following always holds true for all float x:

    0.0f <= (x - floorf(x)) < 1.0f
And the assumption breaks for many, many floats, all of them negative, all of them very close to zero.


  👤 furyofantares Accepted Answer ✓
You may also then be surprised that 1.0f - .000000001f gives the same result: 1.0f

👤 mardiyah
not wrong as c++ libr, math.h etc, specs defines its functions' specs along with limitations