- if ((ix & 0x7fffff) != 0 || (hx & 0x80000000) == 0)
- return x + x; /* x is NaN or +Inf */
- else
- return 0.0; /* x is -Inf */
+ if (hx == 0xff800000) /* -inf */
+ return 0;
+ return x;
+ }
+ if (x >= 128) {
+ STRICT_ASSIGN(float, x, x * 0x1p127f);
+ return x;
+ }
+ if (x <= -150) {
+ STRICT_ASSIGN(float, x, 0x1p-100f*0x1p-100f);
+ return x;