https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113679
--- Comment #11 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Anyway, seems clang is buggy: clang -O2 -m32 -mno-sse -mfpmath=387 -fexcess-precision=standard #include <float.h> int main () { #if FLT_EVAL_METHOD == 2 && LDBL_MANT_DIG == 64 && DBL_MANT_DIG == 53 if ((double) 191.18831051580915 == 191.18831051580915) __builtin_abort (); #endif } should always succeed, because if FLT_EVAL_METHOD is 2, it ought to be evaluated as (long double) (double) 191.18831051580915L == 191.18831051580915L and (double) 191.18831051580915L is 0x1.7e606a3c65c95p+7 while 191.18831051580915L is 0x1.7e606a3c65c9503ap+7L, so they aren't equal.