support ld80 pseudo-denormal invalid bit patterns; treat them as nan

this is silly, but it makes apps that read binary junk and interpret
it as ld80 "safer", and it gets gnulib to stop replacing printf...
This commit is contained in:
Rich Felker 2012-06-20 15:15:10 -04:00
parent c21a19d5a5
commit fad231b960

View File

@ -7,8 +7,11 @@ int __fpclassifyl(long double x)
{
union ldshape u = { x };
int e = u.bits.exp;
if (!e)
return u.bits.m ? FP_SUBNORMAL : FP_ZERO;
if (!e) {
if (u.bits.m >> 63) return FP_NAN;
else if (u.bits.m) return FP_SUBNORMAL;
else return FP_ZERO;
}
if (e == 0x7fff)
return u.bits.m & (uint64_t)-1>>1 ? FP_NAN : FP_INFINITE;
return u.bits.m & (uint64_t)1<<63 ? FP_NORMAL : FP_NAN;