Author: kargl
Date: Sun Sep 23 18:32:03 2012
New Revision: 240866
URL: http://svn.freebsd.org/changeset/base/240866

Log:
  * ld80/s_expl.c:
    . Fix the threshold for expl(x) where |x| is small.
    . Also update the previously incorrect comment to match the
      new threshold.
  
  * ld128/s_expl.c:
    . Re-order logic in exceptional cases to match the logic used in
      other long double functions.
    . Fix the threshold for expl(x) where is |x| is small.
    . Also update the previously incorrect comment to match the
      new threshold.
  
  Submitted by: bde
  Approved by:  das (mentor)

Modified:
  head/lib/msun/ld128/s_expl.c
  head/lib/msun/ld80/s_expl.c

Modified: head/lib/msun/ld128/s_expl.c
==============================================================================
--- head/lib/msun/ld128/s_expl.c        Sun Sep 23 18:13:46 2012        
(r240865)
+++ head/lib/msun/ld128/s_expl.c        Sun Sep 23 18:32:03 2012        
(r240866)
@@ -211,19 +211,16 @@ expl(long double x)
        ix = hx & 0x7fff;
        if (ix >= BIAS + 13) {          /* |x| >= 8192 or x is NaN */
                if (ix == BIAS + LDBL_MAX_EXP) {
-                       if (u.xbits.manh != 0
-                           || u.xbits.manl != 0
-                           || (hx & 0x8000) == 0)
-                               return (x + x); /* x is NaN or +Inf */
-                       else 
-                               return (0.0);   /* x is -Inf */
+                       if (hx & 0x8000 && u.xbits.manh == 0 &&
+                           u.xbits.manl == 0)
+                               return (0.0L);  /* x is -Inf */
+                       return (x + x); /* x is +Inf or NaN */
                }
                if (x > o_threshold)
                        return (huge * huge);
                if (x < u_threshold)
                        return (tiny * tiny);
-       } else if (ix <= BIAS - 115) {  /* |x| < 0x1p-33 */
-                                       /* includes pseudo-denormals */
+       } else if (ix < BIAS - 115) {   /* |x| < 0x1p-115 */
                if (huge + x > 1.0L)    /* trigger inexact iff x != 0 */
                        return (1.0L + x);
        }

Modified: head/lib/msun/ld80/s_expl.c
==============================================================================
--- head/lib/msun/ld80/s_expl.c Sun Sep 23 18:13:46 2012        (r240865)
+++ head/lib/msun/ld80/s_expl.c Sun Sep 23 18:32:03 2012        (r240866)
@@ -249,7 +249,7 @@ expl(long double x)
                        return (huge * huge);
                if (x < u_threshold.e)
                        return (tiny * tiny);
-       } else if (ix <= BIAS - 34) {   /* |x| < 0x1p-33 */
+       } else if (ix < BIAS - 66) {    /* |x| < 0x1p-66 */
                                        /* includes pseudo-denormals */
                if (huge + x > 1.0L)    /* trigger inexact iff x != 0 */
                        return (1.0L + x);
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to