Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 23 Sep 2012 18:32:04 +0000 (UTC)
From:      Steve Kargl <kargl@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r240866 - in head/lib/msun: ld128 ld80
Message-ID:  <201209231832.q8NIW4jD052384@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201209231832.q8NIW4jD052384>