/* determine ix = ilogb(x) */
if (hx < 0x00100000) { /* subnormal x */
if (hx == 0) {
- for (ix = -1043, i=lx; i>0; i<<=1) ix -=1;
+ for (ix = -1043, i=lx; i>0; i<<=1) ix--;
} else {
- for (ix = -1022, i=hx<<11; i>0; i<<=1) ix -=1;
+ for (ix = -1022, i=hx<<11; i>0; i<<=1) ix--;
}
} else
ix = (hx>>20) - 1023;
/* determine iy = ilogb(y) */
if (hy < 0x00100000) { /* subnormal y */
if (hy == 0) {
- for (iy = -1043, i=ly; i>0; i<<=1) iy -=1;
+ for (iy = -1043, i=ly; i>0; i<<=1) iy--;
} else {
- for (iy = -1022, i=hy<<11; i>0; i<<=1) iy -=1;
+ for (iy = -1022, i=hy<<11; i>0; i<<=1) iy--;
}
} else
iy = (hy>>20) - 1023;
while (hx < 0x00100000) { /* normalize x */
hx = hx + hx + (lx>>31);
lx = lx + lx;
- iy -= 1;
+ iy--;
}
if (iy >= -1022) { /* normalize output */
hx = (hx-0x00100000)|((iy+1023)<<20);
if (y < 0x1p-1021) {
if (x + x > y || (x + x == y && (q & 1))) {
q++;
- x-=y;
+ x -= y;
}
} else if (x > 0.5*y || (x == 0.5*y && (q & 1))) {
q++;
- x-=y;
+ x -= y;
}
GET_HIGH_WORD(hx, x);
SET_HIGH_WORD(x, hx ^ sx);