sign1 = SIGN(l1);
sign2 = SIGN(l2);
- if (sign1 != sign2)
+ if (sign1 != sign2) {
+ if ((l1 & 0x7fffffff) == 0 &&
+ (l2 & 0x7fffffff) == 0) return 0;
return ((sign1 > 0) ? -1 : 1);
+ }
return (sign1 * ((l1 < l2) ? 1 : -1));
}
sign1 = SIGN(l1);
sign2 = SIGN(l2);
if (sign1 != sign2) {
- return ((sign1 > 0) ? -1 : 1);
+ l1 &= 0x7fffffff;
+ l2 &= 0x7fffffff;
+ if (l1 != 0 || l2 != 0) {
+ return ((sign1 > 0) ? -1 : 1);
+ }
}
if (l1 != l2) { /* we can decide here */
rv = l1 < l2 ? 1 : -1;
int leadbit = 0;
cpt1 = (char *) from;
- if (((DOUBLE *) cpt1)->_s.p1.fract == 0L) {
+ if (((DOUBLE *) cpt1)->_s.p1.fract == 0L ||
+ ((DOUBLE *) cpt1)->_s.p1.fract == 0x80000000) {
if (size == sizeof(SINGLE)) {
zero: zrf_ext(to);
return;
*/
extend((_double *) &s1,&buf,sizeof(_float));
- p->e = buf.exp+1;
- buf.exp = -1;
+ if (buf.exp == 0 && buf.m1 == 0 && buf.m2 == 0) {
+ p->e = 0;
+ }
+ else {
+ p->e = buf.exp+1;
+ buf.exp = -1;
+ }
compact(&buf,(_double *) &p->f,sizeof(_float));
}
*/
extend(&s1,&buf,sizeof(_double));
- p->e = buf.exp + 1;
- buf.exp = -1;
+ if (buf.exp == 0 && buf.m1 == 0 && buf.m2 == 0) {
+ p->e = 0;
+ }
+ else {
+ p->e = buf.exp + 1;
+ buf.exp = -1;
+ }
compact(&buf,&p->f,sizeof(_double));
}