]> rtime.felk.cvut.cz Git - l4.git/blobdiff - l4/pkg/uclibc/lib/contrib/uclibc/libm/s_modf.c
update
[l4.git] / l4 / pkg / uclibc / lib / contrib / uclibc / libm / s_modf.c
index 26c2f1cd54b34759ab520221bacf100f0f213600..f73d5fddb30f0f6183833bf54123bf104995d42f 100644 (file)
@@ -37,10 +37,8 @@ double modf(double x, double *iptr)
            } else {
                i = (0x000fffff)>>j0;
                if(((i0&i)|i1)==0) {            /* x is integral */
-                   u_int32_t high;
                    *iptr = x;
-                   GET_HIGH_WORD(high,x);
-                   INSERT_WORDS(x,high&0x80000000,0);  /* return +-0 */
+                   INSERT_WORDS(x,i0&0x80000000,0);    /* return +-0 */
                    return x;
                } else {
                    INSERT_WORDS(*iptr,i0&(~i),0);
@@ -48,18 +46,17 @@ double modf(double x, double *iptr)
                }
            }
        } else if (j0>51) {             /* no fraction part */
-           u_int32_t high;
            *iptr = x*one;
-           GET_HIGH_WORD(high,x);
-           INSERT_WORDS(x,high&0x80000000,0);  /* return +-0 */
+           /* We must handle NaNs separately.  */
+           if (j0 == 0x400 && ((i0 & 0xfffff) | i1))
+             return x*one;
+           INSERT_WORDS(x,i0&0x80000000,0);    /* return +-0 */
            return x;
        } else {                        /* fraction part in low x */
            i = ((u_int32_t)(0xffffffff))>>(j0-20);
            if((i1&i)==0) {             /* x is integral */
-               u_int32_t high;
                *iptr = x;
-               GET_HIGH_WORD(high,x);
-               INSERT_WORDS(x,high&0x80000000,0);      /* return +-0 */
+               INSERT_WORDS(x,i0&0x80000000,0);        /* return +-0 */
                return x;
            } else {
                INSERT_WORDS(*iptr,i0,i1&(~i));