[Bug libc/5995] New: strtod and negative underflow

ebb9 at byu dot net sourceware-bugzilla@sourceware.org
Sat Mar 29 16:18:00 GMT 2008


POSIX requires strtod("-1e-100000",NULL) to return a value whose magnitude is no
larger than the smallest normalized number (as well as requiring errno to be set
to ERANGE).  glibc currently meets the strict requirement by returning 0.0, but
this is a poor choice in the face of quality of implementation.  Most other
functions that run into underflow situations at least preserve the sign, on the
assumption that the sign is important (consider, for example,
pow(-1,strtod(str,NULL)), where the wrong sign leads to the wrong infinity).  A
one-line patch should be sufficient:

2008-03-29  Eric Blake  <ebb9@byu.net>

	* stdlib/strtod_l.c (____STRTOF_INTERNAL): Preserve sign on underflow.

Index: stdlib/strtod_l.c
===================================================================
RCS file: /cvs/glibc/libc/stdlib/strtod_l.c,v
retrieving revision 1.28
diff -u -p -b -r1.28 strtod_l.c
--- stdlib/strtod_l.c	8 Mar 2008 21:31:55 -0000	1.28
+++ stdlib/strtod_l.c	29 Mar 2008 16:15:27 -0000
@@ -1028,7 +1028,7 @@ ____STRTOF_INTERNAL (nptr, endptr, group
   if (__builtin_expect (exponent < MIN_10_EXP - (DIG + 1), 0))
     {
       __set_errno (ERANGE);
-      return 0.0;
+      return negative ? -0.0 : 0.0;
     }
 
   if (int_no > 0)

-- 
           Summary: strtod and negative underflow
           Product: glibc
           Version: 2.4
            Status: NEW
          Severity: normal
          Priority: P2
         Component: libc
        AssignedTo: drepper at redhat dot com
        ReportedBy: ebb9 at byu dot net
                CC: glibc-bugs at sources dot redhat dot com


http://sourceware.org/bugzilla/show_bug.cgi?id=5995

------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.



More information about the Glibc-bugs mailing list