https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93806
--- Comment #29 from Vincent Lefèvre <vincent-gcc at vinc17 dot net> --- And with unsigned too (this should be a bit more readable): #include <stdio.h> int main (void) { volatile double d = -1.0; double x = d; unsigned int i = x; printf ("%u\n", i); if (x == -1.0) printf ("%u\n", i); return 0; } gives 4294967295 0