- if (hx >= 0x42b17218) { /* if |x|>=88.721... */
- if (hx > 0x7f800000) /* NaN */
- return x+x;
- if (hx == 0x7f800000) /* exp(+-inf)={inf,-1} */
- return xsb==0 ? x : -1.0;
- if (x > o_threshold)
- return huge*huge; /* overflow */
- }
- if (xsb != 0) { /* x < -27*ln2 */
- /* raise inexact */
- if (x+tiny < (float)0.0)
- return tiny-one; /* return -1 */