http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48341
--- Comment #4 from Vincent Lefèvre <vincent-gcc at vinc17 dot net> --- I can see the same problem under Linux (gcc110.fsffrance.org). According to the C standard (C99 and C11), the *_EPSILON values are "the difference between 1 and the least value greater than 1 that is representable in the given floating point type, b^(1-p)". Here b = 2 and p = LDBL_MANT_DIG = 106. I think that the C standard is badly worded. It should have said "the difference between 1 and the least floating-point value greater than 1 that is representable in the given type, b^(1-p)". What is regarded as a floating-point value is specified by the standard: see 5.2.4.2.2p2 "A floating-point number (x) is defined by the following model: [...]".