
1: /* Compatibility functions for floating point formatting, long double version. 2: Copyright (C) 1996, 1997, 1999, 2000 Free Software Foundation, Inc. 3: This file is part of the GNU C Library. 4: 5: The GNU C Library is free software; you can redistribute it and/or 6: modify it under the terms of the GNU Lesser General Public 7: License as published by the Free Software Foundation; either 8: version 2.1 of the License, or (at your option) any later version. 9: 10: The GNU C Library is distributed in the hope that it will be useful, 11: but WITHOUT ANY WARRANTY; without even the implied warranty of 12: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13: Lesser General Public License for more details. 14: 15: You should have received a copy of the GNU Lesser General Public 16: License along with the GNU C Library; if not, write to the Free 17: Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 18: 02111-1307 USA. */ 19: 20: #include <float.h> 21: 22: #define FLOAT_TYPE long double 23: #define FUNC_PREFIX q 24: #define FLOAT_FMT_FLAG "L" 25: /* Actually we have to write (LDBL_DIG + log10 (LDBL_MAX_10_EXP)) but 26: we don't have log10 available in the preprocessor. Since we cannot 27: assume anything on the used `long double' format be generous. */ 28: #define MAXDIG (NDIGIT_MAX + 12) 29: #define FCVT_MAXDIG (LDBL_MAX_10_EXP + MAXDIG) 30: #if LDBL_MANT_DIG == 64 31: # define NDIGIT_MAX 21 32: #elif LDBL_MANT_DIG == 53 33: # define NDIGIT_MAX 17 34: #elif LDBL_MANT_DIG == 113 35: # define NDIGIT_MAX 36 36: #elif LDBL_MANT_DIG == 106 37: # define NDIGIT_MAX 34 38: #elif LDBL_MANT_DIG == 56 39: # define NDIGIT_MAX 18 40: #else 41: /* See IEEE 854 5.6, table 2 for this formula. Unfortunately we need a 42: compile time constant here, so we cannot use it. */ 43: # error "NDIGIT_MAX must be precomputed" 44: # define NDIGIT_MAX (lrint (ceil (M_LN2 / M_LN10 * LDBL_MANT_DIG + 1.0))) 45: #endif 46: 47: #include "efgcvt.c"