(MPNSIZE): New macro, computed from DBL_MAX_EXP.
authorroland <roland>
Fri, 19 Aug 1994 21:31:32 +0000 (21:31 +0000)
committerroland <roland>
Fri, 19 Aug 1994 21:31:32 +0000 (21:31 +0000)
(MPN_VAR): Use that for size of bignums.

stdio/printf_fp.c

index a8cc296..7ce95c6 100644 (file)
@@ -67,11 +67,11 @@ extern mp_size_t __mpn_extract_double (mp_ptr res_ptr, mp_size_t size,
                                       int *expt, int *is_neg,
                                       double value);
 
-/* 1000 words is an arbitrarily chosen size that is big enough.  Some day I
-   should figure out how big it actually needs to be (which should be
-   computable from the <float.h> parameters).  The size initialization is
-   just a notable random number to catch uninitialized variable bugs.  */
-#define MPN_VAR(name) mp_limb name[1000]; mp_size_t name##size /*= 314159265*/
+/* We believe that these variables need as many bits as the largest binary
+   exponent of a double.  But we are not confident, so we add a few words.  */
+#define MPNSIZE ((DBL_MAX_EXP + BITS_PER_MP_LIMB - 1) / BITS_PER_MP_LIMB) + 3
+
+#define MPN_VAR(name) mp_limb name[MPNSIZE]; mp_size_t name##size
 #define MPN_ASSIGN(dst,src) \
   memcpy (dst, src, (dst##size = src##size) * sizeof (mp_limb))
 #define MPN_POW2(dst, power) \