- if (hx >= 0x40862E42) { /* if |x|>=709.78... */
- if (hx >= 0x7ff00000) {
- uint32_t low;
-
- GET_LOW_WORD(low, x);
- if (((hx&0xfffff)|low) != 0) /* NaN */
- return x+x;
- return xsb==0 ? x : -1.0; /* exp(+-inf)={inf,-1} */
- }
- if(x > o_threshold)
- return huge*huge; /* overflow */
- }
- if (xsb != 0) { /* x < -56*ln2, return -1.0 with inexact */
- /* raise inexact */
- if(x+tiny<0.0)
- return tiny-1.0; /* return -1 */