1 #ifndef _LIBC_FLOAT_H 2 #define _LIBC_FLOAT_H 3 4 #define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION 5 #include <bits/libc-header-start.h> 6 7 /* Some tests also define this macro, requiring a check here to avoid 8 errors for duplicate definitions (see GCC bug 91451). */ 9 #if !defined _ISOMAC && !defined __STDC_WANT_IEC_60559_TYPES_EXT__ 10 # define __STDC_WANT_IEC_60559_TYPES_EXT__ 11 #endif 12 13 #include_next <float.h> 14 15 /* Supplement float.h macros for _FloatN and _FloatNx for older 16 compilers which do not yet support the type. These are described 17 in TS 18661-3. */ 18 #include <features.h> 19 #include <bits/floatn.h> 20 #if !__GNUC_PREREQ (7, 0) && __GLIBC_USE (IEC_60559_TYPES_EXT) 21 22 # if __HAVE_FLOAT128 23 # define FLT128_MANT_DIG 113 24 # define FLT128_DECIMAL_DIG 36 25 # define FLT128_DIG 33 26 # define FLT128_MIN_EXP (-16381) 27 # define FLT128_MIN_10_EXP (-4931) 28 # define FLT128_MAX_EXP 16384 29 # define FLT128_MAX_10_EXP 4932 30 # define FLT128_MAX \ 31 __f128 (1.18973149535723176508575932662800702e+4932) 32 # define FLT128_EPSILON \ 33 __f128 (1.92592994438723585305597794258492732e-34) 34 # define FLT128_MIN \ 35 __f128 (3.36210314311209350626267781732175260e-4932) 36 # define FLT128_TRUE_MIN \ 37 __f128 (6.47517511943802511092443895822764655e-4966) 38 # endif 39 40 /* Types other than _Float128 are typedefs for other types with old 41 compilers. */ 42 43 # if __HAVE_FLOAT32 44 # define FLT32_MANT_DIG FLT_MANT_DIG 45 # define FLT32_DECIMAL_DIG FLT_DECIMAL_DIG 46 # define FLT32_DIG FLT_DIG 47 # define FLT32_MIN_EXP FLT_MIN_EXP 48 # define FLT32_MIN_10_EXP FLT_MIN_10_EXP 49 # define FLT32_MAX_EXP FLT_MAX_EXP 50 # define FLT32_MAX_10_EXP FLT_MAX_10_EXP 51 # define FLT32_MAX FLT_MAX 52 # define FLT32_EPSILON FLT_EPSILON 53 # define FLT32_MIN FLT_MIN 54 # define FLT32_TRUE_MIN FLT_TRUE_MIN 55 # endif 56 57 # if __HAVE_FLOAT64 58 # define FLT64_MANT_DIG DBL_MANT_DIG 59 # define FLT64_DECIMAL_DIG DBL_DECIMAL_DIG 60 # define FLT64_DIG DBL_DIG 61 # define FLT64_MIN_EXP DBL_MIN_EXP 62 # define FLT64_MIN_10_EXP DBL_MIN_10_EXP 63 # define FLT64_MAX_EXP DBL_MAX_EXP 64 # define FLT64_MAX_10_EXP DBL_MAX_10_EXP 65 # define FLT64_MAX DBL_MAX 66 # define FLT64_EPSILON DBL_EPSILON 67 # define FLT64_MIN DBL_MIN 68 # define FLT64_TRUE_MIN DBL_TRUE_MIN 69 # endif 70 71 # if __HAVE_FLOAT32X 72 # define FLT32X_MANT_DIG DBL_MANT_DIG 73 # define FLT32X_DECIMAL_DIG DBL_DECIMAL_DIG 74 # define FLT32X_DIG DBL_DIG 75 # define FLT32X_MIN_EXP DBL_MIN_EXP 76 # define FLT32X_MIN_10_EXP DBL_MIN_10_EXP 77 # define FLT32X_MAX_EXP DBL_MAX_EXP 78 # define FLT32X_MAX_10_EXP DBL_MAX_10_EXP 79 # define FLT32X_MAX DBL_MAX 80 # define FLT32X_EPSILON DBL_EPSILON 81 # define FLT32X_MIN DBL_MIN 82 # define FLT32X_TRUE_MIN DBL_TRUE_MIN 83 # endif 84 85 # if __HAVE_FLOAT64X 86 # if __HAVE_FLOAT64X_LONG_DOUBLE 87 # define FLT64X_MANT_DIG LDBL_MANT_DIG 88 # define FLT64X_DECIMAL_DIG LDBL_DECIMAL_DIG 89 # define FLT64X_DIG LDBL_DIG 90 # define FLT64X_MIN_EXP LDBL_MIN_EXP 91 # define FLT64X_MIN_10_EXP LDBL_MIN_10_EXP 92 # define FLT64X_MAX_EXP LDBL_MAX_EXP 93 # define FLT64X_MAX_10_EXP LDBL_MAX_10_EXP 94 # define FLT64X_MAX LDBL_MAX 95 # define FLT64X_EPSILON LDBL_EPSILON 96 # define FLT64X_MIN LDBL_MIN 97 # define FLT64X_TRUE_MIN LDBL_TRUE_MIN 98 # else 99 # define FLT64X_MANT_DIG FLT128_MANT_DIG 100 # define FLT64X_DECIMAL_DIG FLT128_DECIMAL_DIG 101 # define FLT64X_DIG FLT128_DIG 102 # define FLT64X_MIN_EXP FLT128_MIN_EXP 103 # define FLT64X_MIN_10_EXP FLT128_MIN_10_EXP 104 # define FLT64X_MAX_EXP FLT128_MAX_EXP 105 # define FLT64X_MAX_10_EXP FLT128_MAX_10_EXP 106 # define FLT64X_MAX FLT128_MAX 107 # define FLT64X_EPSILON FLT128_EPSILON 108 # define FLT64X_MIN FLT128_MIN 109 # define FLT64X_TRUE_MIN FLT128_TRUE_MIN 110 # endif 111 # endif 112 113 #endif 114 115 #endif /* _LIBC_FLOAT_H */ 116