If copy a float to another variable, will they be equal in c++?

Share This Post

If copy a float to another variable, will they be equal in c++? Let me Specify This Question Answer.

Besides the assert(NaN==NaN); case pointed out by kmdreko, you can have situations with x87-math, when 80bit floats are temporarily stored to memory and later compared to values which are still stored inside a register.

Possible minimal example, which fails with gcc9.2 when compiled with -O2 -m32:

#include <cassert>

int main(int argc, char**){
    float x = 1.f/(argc+2);
    volatile float y = x;
    assert(x==y);
}

Godbolt Demo: https://godbolt.org/z/X-Xt4R

The volatile can probably be omitted, if you manage to create sufficient register-pressure to have y stored and reloaded from memory (but confuse the compiler enough, not to omit the comparison all-together).

If copy a float to another variable, will they be equal in c++? See This GCC FAQ reference:

Leave a Reply

Your email address will not be published. Required fields are marked *

close