DBL->_s.p2++; /* rounding up */
if (DBL->_s.p2 == 0L) { /* carry out */
DBL->_s.p1.fract++;
+
+ if (f->exp == 0 && (DBL->_s.p1.fract & ~DBL_MASK)) {
+ f->exp++;
+ }
if (DBL->_s.p1.fract & DBL_CARRYOUT) { /* carry out */
if (DBL->_s.p1.fract & 01)
DBL->_s.p2 = CARRYBIT;
#endif
if (f->m1 & SGL_ROUNDUP) {
SGL->fract++;
+ if (f->exp == 0 && (f->m1 & ~SGL_MASK)) {
+ f->exp++;
+ }
/* check normal */
if (SGL->fract & SGL_CARRYOUT) {
SGL->fract >>= 1;
to->exp >>= SGL_EXPSHIFT;
if (to->exp > 0)
leadbit++; /* will set Lead bit later */
+ else to->exp++;
to->m1 = get4(cpt1);
p->fpart = 0;
return;
}
- b64_sft(&e1.m1, 64 - e1.exp);
- b64_sft(&e1.m1, e1.exp - 64); /* "loose" low order bits */
+ b64_sft(&e1.m1, 63 - e1.exp);
+ b64_sft(&e1.m1, e1.exp - 63); /* "loose" low order bits */
compact(&e1,(_double *) &(p->ipart), sizeof(SINGLE));
p->fpart = sbf4(p->ipart, y);
}
p->fpart.__double[1] = 0;
return;
}
- b64_sft(&e1.m1, 64 - e1.exp);
- b64_sft(&e1.m1, e1.exp - 64); /* "loose" low order bits */
+ b64_sft(&e1.m1, 63 - e1.exp);
+ b64_sft(&e1.m1, e1.exp - 63); /* "loose" low order bits */
compact(&e1, &(p->ipart), sizeof(DOUBLE));
p->fpart = sbf8(p->ipart, y);
}