did not handle -0.0 right
authorceriel <none@none>
Tue, 15 Aug 1989 09:04:49 +0000 (09:04 +0000)
committerceriel <none@none>
Tue, 15 Aug 1989 09:04:49 +0000 (09:04 +0000)
mach/proto/fp/cmf4.c
mach/proto/fp/cmf8.c
mach/proto/fp/extend.c
mach/proto/fp/fef4.c
mach/proto/fp/fef8.c

index 0611e33..d427b62 100644 (file)
@@ -30,8 +30,11 @@ _float       f1,f2;
 
         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));
 }
index 8fa51c5..743ea5d 100644 (file)
@@ -28,7 +28,11 @@ _double      d1,d2;
        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;
index 501c498..402b9ea 100644 (file)
@@ -42,7 +42,8 @@ int   size;
        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;
index b781507..2c56d15 100644 (file)
@@ -26,7 +26,12 @@ struct fef4_returns  *r;
                                                */
 
        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));
 }
index e261411..610d3df 100644 (file)
@@ -26,7 +26,12 @@ struct fef8_returns *r;
                                                */
 
        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));
 }