On 2/5/19 4:22 PM, David Hildenbrand wrote: > +static inline bool float128_is_normal(float128 a) > +{ > + return ((a.high + (1ULL << 47)) & -1ULL >> 1) >= 1ULL << 48;
I believe this is off by one: 1 << 48 and >= 1 << 49. The exponent is at [62:48]. The trick is adding 1, letting Inf+NaN overflow into the sign, masking out the sign, and checking that the result >= 2 to eliminate Inf+NaN (0) and Zero+Denormal (1). I think this is clearer as (((a.high >> 48) + 1) & 0x7fff) >= 2. It might be worth applying this to the other formats for clarity... r~