mini-gmp mpz_{get,set}_d not fully compatible with GMP

Niels Möller nisse at lysator.liu.se
Sun Mar 25 11:04:11 UTC 2018


"Marco Bodrato" <bodrato at mail.dm.unipi.it> writes:

> Maybe in printf/repl-vsnprintf.c we may also remove the
>
> #ifdef DBL_MAX_10_EXP
>
> and unconditionaly set double_digits = DBL_MAX_10_EXP.

Like below, then.

Torbjörn, what do you think? Are you aware of any system we'd like to
support but which lacks float.h?

Regards,
/Niels

diff -r 384bf781a7ee printf/repl-vsnprintf.c
--- a/printf/repl-vsnprintf.c	Sun Mar 11 19:22:32 2018 +0100
+++ b/printf/repl-vsnprintf.c	Sun Mar 25 12:59:24 2018 +0200
@@ -44,9 +44,7 @@ see https://www.gnu.org/licenses/.  */
 #include <stdio.h>     /* for NULL */
 #include <stdlib.h>
 
-#if HAVE_FLOAT_H
 #include <float.h>     /* for DBL_MAX_10_EXP etc */
-#endif
 
 #if HAVE_INTTYPES_H
 # include <inttypes.h> /* for intmax_t */
@@ -102,7 +100,7 @@ int
   const char  *fmt;
   size_t      total_width, integer_sizeof, floating_sizeof, len;
   char        fchar, type;
-  int         width, prec, seen_prec, double_digits, long_double_digits;
+  int         width, prec, seen_prec;
   int         *value;
 
   /* preserve orig_ap for use after size estimation */
@@ -124,28 +122,6 @@ int
   floating_sizeof = MAX (floating_sizeof, sizeof (long double));
 #endif
 
-  /* IEEE double or VAX G floats have an 11 bit exponent, so the default is
-     a maximum 308 decimal digits.  VAX D floats have only an 8 bit
-     exponent, but we don't bother trying to detect that directly.  */
-  double_digits = 308;
-#ifdef DBL_MAX_10_EXP
-  /* but in any case prefer a value the compiler says */
-  double_digits = DBL_MAX_10_EXP;
-#endif
-
-  /* IEEE 128-bit quad, Intel 80-bit temporary, or VAX H floats all have 15
-     bit exponents, so the default is a maximum 4932 decimal digits.  */
-  long_double_digits = 4932;
-  /* but if double == long double, then go with that size */
-#if HAVE_LONG_DOUBLE
-  if (sizeof (double) == sizeof (long double))
-    long_double_digits = double_digits;
-#endif
-#ifdef LDBL_MAX_10_EXP
-  /* but in any case prefer a value the compiler says */
-  long_double_digits = LDBL_MAX_10_EXP;
-#endif
-
   for (;;)
     {
       fmt = strchr (fmt, '%');
@@ -253,7 +229,7 @@ int
 	      {
 #if HAVE_LONG_DOUBLE
 		(void) va_arg (ap, long double);
-		total_width += long_double_digits;
+		total_width += LDBL_MAX_10_EXP;
 #else
 		ASSERT_FAIL (long double not available);
 #endif
@@ -261,7 +237,7 @@ int
 	    else
 	      {
 		(void) va_arg (ap, double);
-		total_width += double_digits;
+		total_width += DBL_MAX_10_EXP;
 	      }
 	    break;
 
 

-- 
Niels Möller. PGP-encrypted email is preferred. Keyid 368C6677.
Internet email is subject to wholesale government surveillance.


More information about the gmp-devel mailing list