]> Savannah Git Hosting - gnulib.git/commitdiff
strtof: Revisit underflow behaviour.
authorBruno Haible <bruno@clisp.org>
Tue, 23 Jul 2024 10:40:33 +0000 (12:40 +0200)
committerBruno Haible <bruno@clisp.org>
Mon, 12 Aug 2024 15:32:26 +0000 (17:32 +0200)
* doc/posix-functions/strtof.texi: Mention the macOS bug. Mention the
mingw overflow bug. Mention the underflow bugs on Cygwin 2.9 and mingw.
Mention that gradual underflow does not count as an error on Cygwin 2.9,
mingw, MSVC.
* m4/strtof.m4 (gl_FUNC_STRTOF): Test against the mingw overflow bug.
* tests/test-strtof.h (test_function): Add a gradual underflow test.
Check the sign in case of flush-to-zero underflow.

ChangeLog
doc/posix-functions/strtof.texi
m4/strtof.m4

index 2986e25d795ae6b021e8279c1ff8db1e5de25917..3fa746e172b77ff0d7a0d84b8e26fde0826ed613 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2024-07-23  Bruno Haible  <bruno@clisp.org>
+
+       strtof: Revisit underflow behaviour.
+       * doc/posix-functions/strtof.texi: Mention the macOS bug. Mention the
+       mingw overflow bug. Mention the underflow bugs on Cygwin 2.9 and mingw.
+       Mention that gradual underflow does not count as an error on Cygwin 2.9,
+       mingw, MSVC.
+       * m4/strtof.m4 (gl_FUNC_STRTOF): Test against the mingw overflow bug.
+
 2024-07-23  Bruno Haible  <bruno@clisp.org>
 
        strtof, strtod, strtold: Fix underflow behaviour of system function.
index baebcac92cd0cd2a020a76587a7b38573fe65907..40e677f9b671d599fd0f9806896b6c4a2f6c7569 100644 (file)
@@ -19,7 +19,22 @@ glibc 2.4, Mac OS X 10.5, FreeBSD 6.2.
 
 @item
 This function fails to parse @samp{NaN()} on some platforms:
-glibc-2.5, FreeBSD 6.2.
+glibc 2.5, FreeBSD 6.2.
+
+@item
+This function misparses @samp{nan(} on some platforms:
+macOS 10.6.6.
+
+@item
+This function fails to set @code{errno} upon overflow on some platforms:
+mingw 5.0.
+
+@item
+@c The term "underflow", as defined by ISO C23 ยง 7.12.1.(6), includes both
+@c "gradual underflow" (result is a denormalized number) and "flush-to-zero
+@c underflow" (result is zero).
+This function fails to set @code{errno} upon underflow on some platforms:
+Cygwin 2.9, mingw 5.0.
 @end itemize
 
 Portability problems not fixed by Gnulib:
@@ -39,6 +54,11 @@ This function fails to correctly parse very long strings on some
 platforms:
 Mac OS X 10.5, FreeBSD 6.2, NetBSD 5.0, Cygwin, mingw, MSVC 14.
 
+@item
+This function fails to set @code{errno} upon gradual underflow (resulting
+in a denormalized number) on some platforms:
+MSVC 14.
+
 @item
 The replacement function does not always return correctly rounded results.
 @end itemize
index e37310ebded3d1541db78124913ef46879cccfb4..71516f1bf69105cf53faddd706cbf52436607491 100644 (file)
@@ -1,5 +1,5 @@
 # strtof.m4
-# serial 3
+# serial 4
 dnl Copyright (C) 2002-2003, 2006-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -83,6 +83,17 @@ numeric_equal (float x, float y)
     if (value != HUGE_VAL || term != (string + 3) || errno)
       result |= 8;
   }
+  {
+    /* In mingw 5.0 without __USE_MINGW_ANSI_STDIO and __USE_MINGW_STRTOX,
+       strtof does not set errno upon overflow.  */
+    const char *string = "1e50";
+    char *term;
+    float value;
+    errno = 0;
+    value = strtof (string, &term);
+    if (value != HUGE_VAL || term != (string + 4) || errno != ERANGE)
+      result |= 8;
+  }
   {
     /* glibc 2.7 and cygwin 1.5.24 misparse "nan()".  */
     const char *string = "nan()";
@@ -92,7 +103,7 @@ numeric_equal (float x, float y)
       result |= 16;
   }
   {
-    /* darwin 10.6.1 misparses "nan(".  */
+    /* Darwin 10.6.1 (macOS 10.6.6) misparses "nan(".  */
     const char *string = "nan(";
     char *term;
     float value = strtof (string, &term);