https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102498
--- Comment #1 from Vincent Lefèvre <vincent-gcc at vinc17 dot net> --- A testcase without printf: #include <fenv.h> #define X 0xc.90fdaa22168c235p-2l #define Y 0xc.90fdaa22168c234p-2l int main (void) { volatile long double x, y; fesetround (FE_TOWARDZERO); x = X; y = Y; return x - y == ((X) - (Y)) ? 0 : 1; } GCC returns 1 instead of 0.