1*8feb0f0bSmrg /* Copyright (C) 2002-2020 Free Software Foundation, Inc. 236ac495dSmrg 336ac495dSmrg This file is part of GCC. 436ac495dSmrg 536ac495dSmrg GCC is free software; you can redistribute it and/or modify 636ac495dSmrg it under the terms of the GNU General Public License as published by 736ac495dSmrg the Free Software Foundation; either version 3, or (at your option) 836ac495dSmrg any later version. 936ac495dSmrg 1036ac495dSmrg GCC is distributed in the hope that it will be useful, 1136ac495dSmrg but WITHOUT ANY WARRANTY; without even the implied warranty of 1236ac495dSmrg MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1336ac495dSmrg GNU General Public License for more details. 1436ac495dSmrg 1536ac495dSmrg Under Section 7 of GPL version 3, you are granted additional 1636ac495dSmrg permissions described in the GCC Runtime Library Exception, version 1736ac495dSmrg 3.1, as published by the Free Software Foundation. 1836ac495dSmrg 1936ac495dSmrg You should have received a copy of the GNU General Public License and 2036ac495dSmrg a copy of the GCC Runtime Library Exception along with this program; 2136ac495dSmrg see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 2236ac495dSmrg <http://www.gnu.org/licenses/>. */ 2336ac495dSmrg 2436ac495dSmrg /* 2536ac495dSmrg * ISO C Standard: 5.2.4.2.2 Characteristics of floating types <float.h> 2636ac495dSmrg */ 2736ac495dSmrg 2836ac495dSmrg #ifndef _FLOAT_H___ 2936ac495dSmrg #define _FLOAT_H___ 3036ac495dSmrg 3136ac495dSmrg /* Radix of exponent representation, b. */ 3236ac495dSmrg #undef FLT_RADIX 3336ac495dSmrg #define FLT_RADIX __FLT_RADIX__ 3436ac495dSmrg 3536ac495dSmrg /* Number of base-FLT_RADIX digits in the significand, p. */ 3636ac495dSmrg #undef FLT_MANT_DIG 3736ac495dSmrg #undef DBL_MANT_DIG 3836ac495dSmrg #undef LDBL_MANT_DIG 3936ac495dSmrg #define FLT_MANT_DIG __FLT_MANT_DIG__ 4036ac495dSmrg #define DBL_MANT_DIG __DBL_MANT_DIG__ 4136ac495dSmrg #define LDBL_MANT_DIG __LDBL_MANT_DIG__ 4236ac495dSmrg 4336ac495dSmrg /* Number of decimal digits, q, such that any floating-point number with q 4436ac495dSmrg decimal digits can be rounded into a floating-point number with p radix b 4536ac495dSmrg digits and back again without change to the q decimal digits, 4636ac495dSmrg 4736ac495dSmrg p * log10(b) if b is a power of 10 4836ac495dSmrg floor((p - 1) * log10(b)) otherwise 4936ac495dSmrg */ 5036ac495dSmrg #undef FLT_DIG 5136ac495dSmrg #undef DBL_DIG 5236ac495dSmrg #undef LDBL_DIG 5336ac495dSmrg #define FLT_DIG __FLT_DIG__ 5436ac495dSmrg #define DBL_DIG __DBL_DIG__ 5536ac495dSmrg #define LDBL_DIG __LDBL_DIG__ 5636ac495dSmrg 5736ac495dSmrg /* Minimum int x such that FLT_RADIX**(x-1) is a normalized float, emin */ 5836ac495dSmrg #undef FLT_MIN_EXP 5936ac495dSmrg #undef DBL_MIN_EXP 6036ac495dSmrg #undef LDBL_MIN_EXP 6136ac495dSmrg #define FLT_MIN_EXP __FLT_MIN_EXP__ 6236ac495dSmrg #define DBL_MIN_EXP __DBL_MIN_EXP__ 6336ac495dSmrg #define LDBL_MIN_EXP __LDBL_MIN_EXP__ 6436ac495dSmrg 6536ac495dSmrg /* Minimum negative integer such that 10 raised to that power is in the 6636ac495dSmrg range of normalized floating-point numbers, 6736ac495dSmrg 6836ac495dSmrg ceil(log10(b) * (emin - 1)) 6936ac495dSmrg */ 7036ac495dSmrg #undef FLT_MIN_10_EXP 7136ac495dSmrg #undef DBL_MIN_10_EXP 7236ac495dSmrg #undef LDBL_MIN_10_EXP 7336ac495dSmrg #define FLT_MIN_10_EXP __FLT_MIN_10_EXP__ 7436ac495dSmrg #define DBL_MIN_10_EXP __DBL_MIN_10_EXP__ 7536ac495dSmrg #define LDBL_MIN_10_EXP __LDBL_MIN_10_EXP__ 7636ac495dSmrg 7736ac495dSmrg /* Maximum int x such that FLT_RADIX**(x-1) is a representable float, emax. */ 7836ac495dSmrg #undef FLT_MAX_EXP 7936ac495dSmrg #undef DBL_MAX_EXP 8036ac495dSmrg #undef LDBL_MAX_EXP 8136ac495dSmrg #define FLT_MAX_EXP __FLT_MAX_EXP__ 8236ac495dSmrg #define DBL_MAX_EXP __DBL_MAX_EXP__ 8336ac495dSmrg #define LDBL_MAX_EXP __LDBL_MAX_EXP__ 8436ac495dSmrg 8536ac495dSmrg /* Maximum integer such that 10 raised to that power is in the range of 8636ac495dSmrg representable finite floating-point numbers, 8736ac495dSmrg 8836ac495dSmrg floor(log10((1 - b**-p) * b**emax)) 8936ac495dSmrg */ 9036ac495dSmrg #undef FLT_MAX_10_EXP 9136ac495dSmrg #undef DBL_MAX_10_EXP 9236ac495dSmrg #undef LDBL_MAX_10_EXP 9336ac495dSmrg #define FLT_MAX_10_EXP __FLT_MAX_10_EXP__ 9436ac495dSmrg #define DBL_MAX_10_EXP __DBL_MAX_10_EXP__ 9536ac495dSmrg #define LDBL_MAX_10_EXP __LDBL_MAX_10_EXP__ 9636ac495dSmrg 9736ac495dSmrg /* Maximum representable finite floating-point number, 9836ac495dSmrg 9936ac495dSmrg (1 - b**-p) * b**emax 10036ac495dSmrg */ 10136ac495dSmrg #undef FLT_MAX 10236ac495dSmrg #undef DBL_MAX 10336ac495dSmrg #undef LDBL_MAX 10436ac495dSmrg #define FLT_MAX __FLT_MAX__ 10536ac495dSmrg #define DBL_MAX __DBL_MAX__ 10636ac495dSmrg #define LDBL_MAX __LDBL_MAX__ 10736ac495dSmrg 10836ac495dSmrg /* The difference between 1 and the least value greater than 1 that is 10936ac495dSmrg representable in the given floating point type, b**1-p. */ 11036ac495dSmrg #undef FLT_EPSILON 11136ac495dSmrg #undef DBL_EPSILON 11236ac495dSmrg #undef LDBL_EPSILON 11336ac495dSmrg #define FLT_EPSILON __FLT_EPSILON__ 11436ac495dSmrg #define DBL_EPSILON __DBL_EPSILON__ 11536ac495dSmrg #define LDBL_EPSILON __LDBL_EPSILON__ 11636ac495dSmrg 11736ac495dSmrg /* Minimum normalized positive floating-point number, b**(emin - 1). */ 11836ac495dSmrg #undef FLT_MIN 11936ac495dSmrg #undef DBL_MIN 12036ac495dSmrg #undef LDBL_MIN 12136ac495dSmrg #define FLT_MIN __FLT_MIN__ 12236ac495dSmrg #define DBL_MIN __DBL_MIN__ 12336ac495dSmrg #define LDBL_MIN __LDBL_MIN__ 12436ac495dSmrg 12536ac495dSmrg /* Addition rounds to 0: zero, 1: nearest, 2: +inf, 3: -inf, -1: unknown. */ 12636ac495dSmrg /* ??? This is supposed to change with calls to fesetround in <fenv.h>. */ 12736ac495dSmrg #undef FLT_ROUNDS 12836ac495dSmrg #define FLT_ROUNDS 1 12936ac495dSmrg 13036ac495dSmrg #if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) \ 13136ac495dSmrg || (defined (__cplusplus) && __cplusplus >= 201103L) 13236ac495dSmrg /* The floating-point expression evaluation method. The precise 13336ac495dSmrg definitions of these values are generalised to include support for 13436ac495dSmrg the interchange and extended types defined in ISO/IEC TS 18661-3. 13536ac495dSmrg Prior to this (for C99/C11) the definitions were: 13636ac495dSmrg 13736ac495dSmrg -1 indeterminate 13836ac495dSmrg 0 evaluate all operations and constants just to the range and 13936ac495dSmrg precision of the type 14036ac495dSmrg 1 evaluate operations and constants of type float and double 14136ac495dSmrg to the range and precision of the double type, evaluate 14236ac495dSmrg long double operations and constants to the range and 14336ac495dSmrg precision of the long double type 14436ac495dSmrg 2 evaluate all operations and constants to the range and 14536ac495dSmrg precision of the long double type 14636ac495dSmrg 14736ac495dSmrg The TS 18661-3 definitions are: 14836ac495dSmrg 14936ac495dSmrg -1 indeterminate 15036ac495dSmrg 0 evaluate all operations and constants, whose semantic type has 15136ac495dSmrg at most the range and precision of float, to the range and 15236ac495dSmrg precision of float; evaluate all other operations and constants 15336ac495dSmrg to the range and precision of the semantic type. 15436ac495dSmrg 1 evaluate all operations and constants, whose semantic type has 15536ac495dSmrg at most the range and precision of double, to the range and 15636ac495dSmrg precision of double; evaluate all other operations and constants 15736ac495dSmrg to the range and precision of the semantic type. 15836ac495dSmrg 2 evaluate all operations and constants, whose semantic type has 15936ac495dSmrg at most the range and precision of long double, to the range and 16036ac495dSmrg precision of long double; evaluate all other operations and 16136ac495dSmrg constants to the range and precision of the semantic type. 16236ac495dSmrg N where _FloatN is a supported interchange floating type 16336ac495dSmrg evaluate all operations and constants, whose semantic type has 16436ac495dSmrg at most the range and precision of the _FloatN type, to the 16536ac495dSmrg range and precision of the _FloatN type; evaluate all other 16636ac495dSmrg operations and constants to the range and precision of the 16736ac495dSmrg semantic type. 16836ac495dSmrg N + 1, where _FloatNx is a supported extended floating type 16936ac495dSmrg evaluate operations and constants, whose semantic type has at 17036ac495dSmrg most the range and precision of the _FloatNx type, to the range 17136ac495dSmrg and precision of the _FloatNx type; evaluate all other 17236ac495dSmrg operations and constants to the range and precision of the 17336ac495dSmrg semantic type. 17436ac495dSmrg 17536ac495dSmrg The compiler predefines two macros: 17636ac495dSmrg 17736ac495dSmrg __FLT_EVAL_METHOD__ 17836ac495dSmrg Which, depending on the value given for 17936ac495dSmrg -fpermitted-flt-eval-methods, may be limited to only those values 18036ac495dSmrg for FLT_EVAL_METHOD defined in C99/C11. 18136ac495dSmrg 18236ac495dSmrg __FLT_EVAL_METHOD_TS_18661_3__ 18336ac495dSmrg Which always permits the values for FLT_EVAL_METHOD defined in 18436ac495dSmrg ISO/IEC TS 18661-3. 18536ac495dSmrg 18636ac495dSmrg Here we want to use __FLT_EVAL_METHOD__, unless 18736ac495dSmrg __STDC_WANT_IEC_60559_TYPES_EXT__ is defined, in which case the user 18836ac495dSmrg is specifically asking for the ISO/IEC TS 18661-3 types, so we use 18936ac495dSmrg __FLT_EVAL_METHOD_TS_18661_3__. 19036ac495dSmrg 19136ac495dSmrg ??? This ought to change with the setting of the fp control word; 19236ac495dSmrg the value provided by the compiler assumes the widest setting. */ 19336ac495dSmrg #undef FLT_EVAL_METHOD 19436ac495dSmrg #ifdef __STDC_WANT_IEC_60559_TYPES_EXT__ 19536ac495dSmrg #define FLT_EVAL_METHOD __FLT_EVAL_METHOD_TS_18661_3__ 19636ac495dSmrg #else 19736ac495dSmrg #define FLT_EVAL_METHOD __FLT_EVAL_METHOD__ 19836ac495dSmrg #endif 19936ac495dSmrg 20036ac495dSmrg /* Number of decimal digits, n, such that any floating-point number in the 20136ac495dSmrg widest supported floating type with pmax radix b digits can be rounded 20236ac495dSmrg to a floating-point number with n decimal digits and back again without 20336ac495dSmrg change to the value, 20436ac495dSmrg 20536ac495dSmrg pmax * log10(b) if b is a power of 10 20636ac495dSmrg ceil(1 + pmax * log10(b)) otherwise 20736ac495dSmrg */ 20836ac495dSmrg #undef DECIMAL_DIG 20936ac495dSmrg #define DECIMAL_DIG __DECIMAL_DIG__ 21036ac495dSmrg 21136ac495dSmrg #endif /* C99 */ 21236ac495dSmrg 213c0a68be4Smrg #if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) \ 214c0a68be4Smrg || (defined (__cplusplus) && __cplusplus >= 201703L) 21536ac495dSmrg /* Versions of DECIMAL_DIG for each floating-point type. */ 21636ac495dSmrg #undef FLT_DECIMAL_DIG 21736ac495dSmrg #undef DBL_DECIMAL_DIG 21836ac495dSmrg #undef LDBL_DECIMAL_DIG 21936ac495dSmrg #define FLT_DECIMAL_DIG __FLT_DECIMAL_DIG__ 22036ac495dSmrg #define DBL_DECIMAL_DIG __DBL_DECIMAL_DIG__ 22136ac495dSmrg #define LDBL_DECIMAL_DIG __LDBL_DECIMAL_DIG__ 22236ac495dSmrg 22336ac495dSmrg /* Whether types support subnormal numbers. */ 22436ac495dSmrg #undef FLT_HAS_SUBNORM 22536ac495dSmrg #undef DBL_HAS_SUBNORM 22636ac495dSmrg #undef LDBL_HAS_SUBNORM 22736ac495dSmrg #define FLT_HAS_SUBNORM __FLT_HAS_DENORM__ 22836ac495dSmrg #define DBL_HAS_SUBNORM __DBL_HAS_DENORM__ 22936ac495dSmrg #define LDBL_HAS_SUBNORM __LDBL_HAS_DENORM__ 23036ac495dSmrg 23136ac495dSmrg /* Minimum positive values, including subnormals. */ 23236ac495dSmrg #undef FLT_TRUE_MIN 23336ac495dSmrg #undef DBL_TRUE_MIN 23436ac495dSmrg #undef LDBL_TRUE_MIN 23536ac495dSmrg #define FLT_TRUE_MIN __FLT_DENORM_MIN__ 23636ac495dSmrg #define DBL_TRUE_MIN __DBL_DENORM_MIN__ 23736ac495dSmrg #define LDBL_TRUE_MIN __LDBL_DENORM_MIN__ 23836ac495dSmrg 23936ac495dSmrg #endif /* C11 */ 24036ac495dSmrg 241*8feb0f0bSmrg #if defined __STDC_VERSION__ && __STDC_VERSION__ > 201710L 242*8feb0f0bSmrg /* Maximum finite positive value with MANT_DIG digits in the 243*8feb0f0bSmrg significand taking their maximum value. */ 244*8feb0f0bSmrg #undef FLT_NORM_MAX 245*8feb0f0bSmrg #undef DBL_NORM_MAX 246*8feb0f0bSmrg #undef LDBL_NORM_MAX 247*8feb0f0bSmrg #define FLT_NORM_MAX __FLT_NORM_MAX__ 248*8feb0f0bSmrg #define DBL_NORM_MAX __DBL_NORM_MAX__ 249*8feb0f0bSmrg #define LDBL_NORM_MAX __LDBL_NORM_MAX__ 250*8feb0f0bSmrg 251*8feb0f0bSmrg #endif /* C2X */ 252*8feb0f0bSmrg 25336ac495dSmrg #ifdef __STDC_WANT_IEC_60559_BFP_EXT__ 25436ac495dSmrg /* Number of decimal digits for which conversions between decimal 25536ac495dSmrg character strings and binary formats, in both directions, are 25636ac495dSmrg correctly rounded. */ 25736ac495dSmrg #define CR_DECIMAL_DIG __UINTMAX_MAX__ 25836ac495dSmrg #endif 25936ac495dSmrg 26036ac495dSmrg #ifdef __STDC_WANT_IEC_60559_TYPES_EXT__ 26136ac495dSmrg /* Constants for _FloatN and _FloatNx types from TS 18661-3. See 26236ac495dSmrg comments above for their semantics. */ 26336ac495dSmrg 26436ac495dSmrg #ifdef __FLT16_MANT_DIG__ 26536ac495dSmrg #undef FLT16_MANT_DIG 26636ac495dSmrg #define FLT16_MANT_DIG __FLT16_MANT_DIG__ 26736ac495dSmrg #undef FLT16_DIG 26836ac495dSmrg #define FLT16_DIG __FLT16_DIG__ 26936ac495dSmrg #undef FLT16_MIN_EXP 27036ac495dSmrg #define FLT16_MIN_EXP __FLT16_MIN_EXP__ 27136ac495dSmrg #undef FLT16_MIN_10_EXP 27236ac495dSmrg #define FLT16_MIN_10_EXP __FLT16_MIN_10_EXP__ 27336ac495dSmrg #undef FLT16_MAX_EXP 27436ac495dSmrg #define FLT16_MAX_EXP __FLT16_MAX_EXP__ 27536ac495dSmrg #undef FLT16_MAX_10_EXP 27636ac495dSmrg #define FLT16_MAX_10_EXP __FLT16_MAX_10_EXP__ 27736ac495dSmrg #undef FLT16_MAX 27836ac495dSmrg #define FLT16_MAX __FLT16_MAX__ 27936ac495dSmrg #undef FLT16_EPSILON 28036ac495dSmrg #define FLT16_EPSILON __FLT16_EPSILON__ 28136ac495dSmrg #undef FLT16_MIN 28236ac495dSmrg #define FLT16_MIN __FLT16_MIN__ 28336ac495dSmrg #undef FLT16_DECIMAL_DIG 28436ac495dSmrg #define FLT16_DECIMAL_DIG __FLT16_DECIMAL_DIG__ 28536ac495dSmrg #undef FLT16_TRUE_MIN 28636ac495dSmrg #define FLT16_TRUE_MIN __FLT16_DENORM_MIN__ 28736ac495dSmrg #endif /* __FLT16_MANT_DIG__. */ 28836ac495dSmrg 28936ac495dSmrg #ifdef __FLT32_MANT_DIG__ 29036ac495dSmrg #undef FLT32_MANT_DIG 29136ac495dSmrg #define FLT32_MANT_DIG __FLT32_MANT_DIG__ 29236ac495dSmrg #undef FLT32_DIG 29336ac495dSmrg #define FLT32_DIG __FLT32_DIG__ 29436ac495dSmrg #undef FLT32_MIN_EXP 29536ac495dSmrg #define FLT32_MIN_EXP __FLT32_MIN_EXP__ 29636ac495dSmrg #undef FLT32_MIN_10_EXP 29736ac495dSmrg #define FLT32_MIN_10_EXP __FLT32_MIN_10_EXP__ 29836ac495dSmrg #undef FLT32_MAX_EXP 29936ac495dSmrg #define FLT32_MAX_EXP __FLT32_MAX_EXP__ 30036ac495dSmrg #undef FLT32_MAX_10_EXP 30136ac495dSmrg #define FLT32_MAX_10_EXP __FLT32_MAX_10_EXP__ 30236ac495dSmrg #undef FLT32_MAX 30336ac495dSmrg #define FLT32_MAX __FLT32_MAX__ 30436ac495dSmrg #undef FLT32_EPSILON 30536ac495dSmrg #define FLT32_EPSILON __FLT32_EPSILON__ 30636ac495dSmrg #undef FLT32_MIN 30736ac495dSmrg #define FLT32_MIN __FLT32_MIN__ 30836ac495dSmrg #undef FLT32_DECIMAL_DIG 30936ac495dSmrg #define FLT32_DECIMAL_DIG __FLT32_DECIMAL_DIG__ 31036ac495dSmrg #undef FLT32_TRUE_MIN 31136ac495dSmrg #define FLT32_TRUE_MIN __FLT32_DENORM_MIN__ 31236ac495dSmrg #endif /* __FLT32_MANT_DIG__. */ 31336ac495dSmrg 31436ac495dSmrg #ifdef __FLT64_MANT_DIG__ 31536ac495dSmrg #undef FLT64_MANT_DIG 31636ac495dSmrg #define FLT64_MANT_DIG __FLT64_MANT_DIG__ 31736ac495dSmrg #undef FLT64_DIG 31836ac495dSmrg #define FLT64_DIG __FLT64_DIG__ 31936ac495dSmrg #undef FLT64_MIN_EXP 32036ac495dSmrg #define FLT64_MIN_EXP __FLT64_MIN_EXP__ 32136ac495dSmrg #undef FLT64_MIN_10_EXP 32236ac495dSmrg #define FLT64_MIN_10_EXP __FLT64_MIN_10_EXP__ 32336ac495dSmrg #undef FLT64_MAX_EXP 32436ac495dSmrg #define FLT64_MAX_EXP __FLT64_MAX_EXP__ 32536ac495dSmrg #undef FLT64_MAX_10_EXP 32636ac495dSmrg #define FLT64_MAX_10_EXP __FLT64_MAX_10_EXP__ 32736ac495dSmrg #undef FLT64_MAX 32836ac495dSmrg #define FLT64_MAX __FLT64_MAX__ 32936ac495dSmrg #undef FLT64_EPSILON 33036ac495dSmrg #define FLT64_EPSILON __FLT64_EPSILON__ 33136ac495dSmrg #undef FLT64_MIN 33236ac495dSmrg #define FLT64_MIN __FLT64_MIN__ 33336ac495dSmrg #undef FLT64_DECIMAL_DIG 33436ac495dSmrg #define FLT64_DECIMAL_DIG __FLT64_DECIMAL_DIG__ 33536ac495dSmrg #undef FLT64_TRUE_MIN 33636ac495dSmrg #define FLT64_TRUE_MIN __FLT64_DENORM_MIN__ 33736ac495dSmrg #endif /* __FLT64_MANT_DIG__. */ 33836ac495dSmrg 33936ac495dSmrg #ifdef __FLT128_MANT_DIG__ 34036ac495dSmrg #undef FLT128_MANT_DIG 34136ac495dSmrg #define FLT128_MANT_DIG __FLT128_MANT_DIG__ 34236ac495dSmrg #undef FLT128_DIG 34336ac495dSmrg #define FLT128_DIG __FLT128_DIG__ 34436ac495dSmrg #undef FLT128_MIN_EXP 34536ac495dSmrg #define FLT128_MIN_EXP __FLT128_MIN_EXP__ 34636ac495dSmrg #undef FLT128_MIN_10_EXP 34736ac495dSmrg #define FLT128_MIN_10_EXP __FLT128_MIN_10_EXP__ 34836ac495dSmrg #undef FLT128_MAX_EXP 34936ac495dSmrg #define FLT128_MAX_EXP __FLT128_MAX_EXP__ 35036ac495dSmrg #undef FLT128_MAX_10_EXP 35136ac495dSmrg #define FLT128_MAX_10_EXP __FLT128_MAX_10_EXP__ 35236ac495dSmrg #undef FLT128_MAX 35336ac495dSmrg #define FLT128_MAX __FLT128_MAX__ 35436ac495dSmrg #undef FLT128_EPSILON 35536ac495dSmrg #define FLT128_EPSILON __FLT128_EPSILON__ 35636ac495dSmrg #undef FLT128_MIN 35736ac495dSmrg #define FLT128_MIN __FLT128_MIN__ 35836ac495dSmrg #undef FLT128_DECIMAL_DIG 35936ac495dSmrg #define FLT128_DECIMAL_DIG __FLT128_DECIMAL_DIG__ 36036ac495dSmrg #undef FLT128_TRUE_MIN 36136ac495dSmrg #define FLT128_TRUE_MIN __FLT128_DENORM_MIN__ 36236ac495dSmrg #endif /* __FLT128_MANT_DIG__. */ 36336ac495dSmrg 36436ac495dSmrg #ifdef __FLT32X_MANT_DIG__ 36536ac495dSmrg #undef FLT32X_MANT_DIG 36636ac495dSmrg #define FLT32X_MANT_DIG __FLT32X_MANT_DIG__ 36736ac495dSmrg #undef FLT32X_DIG 36836ac495dSmrg #define FLT32X_DIG __FLT32X_DIG__ 36936ac495dSmrg #undef FLT32X_MIN_EXP 37036ac495dSmrg #define FLT32X_MIN_EXP __FLT32X_MIN_EXP__ 37136ac495dSmrg #undef FLT32X_MIN_10_EXP 37236ac495dSmrg #define FLT32X_MIN_10_EXP __FLT32X_MIN_10_EXP__ 37336ac495dSmrg #undef FLT32X_MAX_EXP 37436ac495dSmrg #define FLT32X_MAX_EXP __FLT32X_MAX_EXP__ 37536ac495dSmrg #undef FLT32X_MAX_10_EXP 37636ac495dSmrg #define FLT32X_MAX_10_EXP __FLT32X_MAX_10_EXP__ 37736ac495dSmrg #undef FLT32X_MAX 37836ac495dSmrg #define FLT32X_MAX __FLT32X_MAX__ 37936ac495dSmrg #undef FLT32X_EPSILON 38036ac495dSmrg #define FLT32X_EPSILON __FLT32X_EPSILON__ 38136ac495dSmrg #undef FLT32X_MIN 38236ac495dSmrg #define FLT32X_MIN __FLT32X_MIN__ 38336ac495dSmrg #undef FLT32X_DECIMAL_DIG 38436ac495dSmrg #define FLT32X_DECIMAL_DIG __FLT32X_DECIMAL_DIG__ 38536ac495dSmrg #undef FLT32X_TRUE_MIN 38636ac495dSmrg #define FLT32X_TRUE_MIN __FLT32X_DENORM_MIN__ 38736ac495dSmrg #endif /* __FLT32X_MANT_DIG__. */ 38836ac495dSmrg 38936ac495dSmrg #ifdef __FLT64X_MANT_DIG__ 39036ac495dSmrg #undef FLT64X_MANT_DIG 39136ac495dSmrg #define FLT64X_MANT_DIG __FLT64X_MANT_DIG__ 39236ac495dSmrg #undef FLT64X_DIG 39336ac495dSmrg #define FLT64X_DIG __FLT64X_DIG__ 39436ac495dSmrg #undef FLT64X_MIN_EXP 39536ac495dSmrg #define FLT64X_MIN_EXP __FLT64X_MIN_EXP__ 39636ac495dSmrg #undef FLT64X_MIN_10_EXP 39736ac495dSmrg #define FLT64X_MIN_10_EXP __FLT64X_MIN_10_EXP__ 39836ac495dSmrg #undef FLT64X_MAX_EXP 39936ac495dSmrg #define FLT64X_MAX_EXP __FLT64X_MAX_EXP__ 40036ac495dSmrg #undef FLT64X_MAX_10_EXP 40136ac495dSmrg #define FLT64X_MAX_10_EXP __FLT64X_MAX_10_EXP__ 40236ac495dSmrg #undef FLT64X_MAX 40336ac495dSmrg #define FLT64X_MAX __FLT64X_MAX__ 40436ac495dSmrg #undef FLT64X_EPSILON 40536ac495dSmrg #define FLT64X_EPSILON __FLT64X_EPSILON__ 40636ac495dSmrg #undef FLT64X_MIN 40736ac495dSmrg #define FLT64X_MIN __FLT64X_MIN__ 40836ac495dSmrg #undef FLT64X_DECIMAL_DIG 40936ac495dSmrg #define FLT64X_DECIMAL_DIG __FLT64X_DECIMAL_DIG__ 41036ac495dSmrg #undef FLT64X_TRUE_MIN 41136ac495dSmrg #define FLT64X_TRUE_MIN __FLT64X_DENORM_MIN__ 41236ac495dSmrg #endif /* __FLT64X_MANT_DIG__. */ 41336ac495dSmrg 41436ac495dSmrg #ifdef __FLT128X_MANT_DIG__ 41536ac495dSmrg #undef FLT128X_MANT_DIG 41636ac495dSmrg #define FLT128X_MANT_DIG __FLT128X_MANT_DIG__ 41736ac495dSmrg #undef FLT128X_DIG 41836ac495dSmrg #define FLT128X_DIG __FLT128X_DIG__ 41936ac495dSmrg #undef FLT128X_MIN_EXP 42036ac495dSmrg #define FLT128X_MIN_EXP __FLT128X_MIN_EXP__ 42136ac495dSmrg #undef FLT128X_MIN_10_EXP 42236ac495dSmrg #define FLT128X_MIN_10_EXP __FLT128X_MIN_10_EXP__ 42336ac495dSmrg #undef FLT128X_MAX_EXP 42436ac495dSmrg #define FLT128X_MAX_EXP __FLT128X_MAX_EXP__ 42536ac495dSmrg #undef FLT128X_MAX_10_EXP 42636ac495dSmrg #define FLT128X_MAX_10_EXP __FLT128X_MAX_10_EXP__ 42736ac495dSmrg #undef FLT128X_MAX 42836ac495dSmrg #define FLT128X_MAX __FLT128X_MAX__ 42936ac495dSmrg #undef FLT128X_EPSILON 43036ac495dSmrg #define FLT128X_EPSILON __FLT128X_EPSILON__ 43136ac495dSmrg #undef FLT128X_MIN 43236ac495dSmrg #define FLT128X_MIN __FLT128X_MIN__ 43336ac495dSmrg #undef FLT128X_DECIMAL_DIG 43436ac495dSmrg #define FLT128X_DECIMAL_DIG __FLT128X_DECIMAL_DIG__ 43536ac495dSmrg #undef FLT128X_TRUE_MIN 43636ac495dSmrg #define FLT128X_TRUE_MIN __FLT128X_DENORM_MIN__ 43736ac495dSmrg #endif /* __FLT128X_MANT_DIG__. */ 43836ac495dSmrg 43936ac495dSmrg #endif /* __STDC_WANT_IEC_60559_TYPES_EXT__. */ 44036ac495dSmrg 441*8feb0f0bSmrg #ifdef __DEC32_MANT_DIG__ 442*8feb0f0bSmrg #if (defined __STDC_WANT_DEC_FP__ \ 443*8feb0f0bSmrg || defined __STDC_WANT_IEC_60559_DFP_EXT__ \ 444*8feb0f0bSmrg || (defined __STDC_VERSION__ && __STDC_VERSION__ > 201710L)) 445*8feb0f0bSmrg /* C2X; formerly Technical Report 24732, extension for decimal 446*8feb0f0bSmrg floating-point arithmetic: Characteristic of decimal floating types 447*8feb0f0bSmrg <float.h>, and TS 18661-2. */ 44836ac495dSmrg 44936ac495dSmrg /* Number of base-FLT_RADIX digits in the significand, p. */ 45036ac495dSmrg #undef DEC32_MANT_DIG 45136ac495dSmrg #undef DEC64_MANT_DIG 45236ac495dSmrg #undef DEC128_MANT_DIG 45336ac495dSmrg #define DEC32_MANT_DIG __DEC32_MANT_DIG__ 45436ac495dSmrg #define DEC64_MANT_DIG __DEC64_MANT_DIG__ 45536ac495dSmrg #define DEC128_MANT_DIG __DEC128_MANT_DIG__ 45636ac495dSmrg 45736ac495dSmrg /* Minimum exponent. */ 45836ac495dSmrg #undef DEC32_MIN_EXP 45936ac495dSmrg #undef DEC64_MIN_EXP 46036ac495dSmrg #undef DEC128_MIN_EXP 46136ac495dSmrg #define DEC32_MIN_EXP __DEC32_MIN_EXP__ 46236ac495dSmrg #define DEC64_MIN_EXP __DEC64_MIN_EXP__ 46336ac495dSmrg #define DEC128_MIN_EXP __DEC128_MIN_EXP__ 46436ac495dSmrg 46536ac495dSmrg /* Maximum exponent. */ 46636ac495dSmrg #undef DEC32_MAX_EXP 46736ac495dSmrg #undef DEC64_MAX_EXP 46836ac495dSmrg #undef DEC128_MAX_EXP 46936ac495dSmrg #define DEC32_MAX_EXP __DEC32_MAX_EXP__ 47036ac495dSmrg #define DEC64_MAX_EXP __DEC64_MAX_EXP__ 47136ac495dSmrg #define DEC128_MAX_EXP __DEC128_MAX_EXP__ 47236ac495dSmrg 47336ac495dSmrg /* Maximum representable finite decimal floating-point number 47436ac495dSmrg (there are 6, 15, and 33 9s after the decimal points respectively). */ 47536ac495dSmrg #undef DEC32_MAX 47636ac495dSmrg #undef DEC64_MAX 47736ac495dSmrg #undef DEC128_MAX 47836ac495dSmrg #define DEC32_MAX __DEC32_MAX__ 47936ac495dSmrg #define DEC64_MAX __DEC64_MAX__ 48036ac495dSmrg #define DEC128_MAX __DEC128_MAX__ 48136ac495dSmrg 48236ac495dSmrg /* The difference between 1 and the least value greater than 1 that is 48336ac495dSmrg representable in the given floating point type. */ 48436ac495dSmrg #undef DEC32_EPSILON 48536ac495dSmrg #undef DEC64_EPSILON 48636ac495dSmrg #undef DEC128_EPSILON 48736ac495dSmrg #define DEC32_EPSILON __DEC32_EPSILON__ 48836ac495dSmrg #define DEC64_EPSILON __DEC64_EPSILON__ 48936ac495dSmrg #define DEC128_EPSILON __DEC128_EPSILON__ 49036ac495dSmrg 49136ac495dSmrg /* Minimum normalized positive floating-point number. */ 49236ac495dSmrg #undef DEC32_MIN 49336ac495dSmrg #undef DEC64_MIN 49436ac495dSmrg #undef DEC128_MIN 49536ac495dSmrg #define DEC32_MIN __DEC32_MIN__ 49636ac495dSmrg #define DEC64_MIN __DEC64_MIN__ 49736ac495dSmrg #define DEC128_MIN __DEC128_MIN__ 49836ac495dSmrg 49936ac495dSmrg /* The floating-point expression evaluation method. 50036ac495dSmrg -1 indeterminate 50136ac495dSmrg 0 evaluate all operations and constants just to the range and 50236ac495dSmrg precision of the type 50336ac495dSmrg 1 evaluate operations and constants of type _Decimal32 50436ac495dSmrg and _Decimal64 to the range and precision of the _Decimal64 50536ac495dSmrg type, evaluate _Decimal128 operations and constants to the 50636ac495dSmrg range and precision of the _Decimal128 type; 50736ac495dSmrg 2 evaluate all operations and constants to the range and 50836ac495dSmrg precision of the _Decimal128 type. */ 50936ac495dSmrg 51036ac495dSmrg #undef DEC_EVAL_METHOD 51136ac495dSmrg #define DEC_EVAL_METHOD __DEC_EVAL_METHOD__ 51236ac495dSmrg 513*8feb0f0bSmrg #endif /* __STDC_WANT_DEC_FP__ || __STDC_WANT_IEC_60559_DFP_EXT__ || C2X. */ 514*8feb0f0bSmrg 515*8feb0f0bSmrg #ifdef __STDC_WANT_DEC_FP__ 516*8feb0f0bSmrg 517*8feb0f0bSmrg /* Minimum subnormal positive floating-point number. */ 518*8feb0f0bSmrg #undef DEC32_SUBNORMAL_MIN 519*8feb0f0bSmrg #undef DEC64_SUBNORMAL_MIN 520*8feb0f0bSmrg #undef DEC128_SUBNORMAL_MIN 521*8feb0f0bSmrg #define DEC32_SUBNORMAL_MIN __DEC32_SUBNORMAL_MIN__ 522*8feb0f0bSmrg #define DEC64_SUBNORMAL_MIN __DEC64_SUBNORMAL_MIN__ 523*8feb0f0bSmrg #define DEC128_SUBNORMAL_MIN __DEC128_SUBNORMAL_MIN__ 524*8feb0f0bSmrg 525*8feb0f0bSmrg #endif /* __STDC_WANT_DEC_FP__. */ 526*8feb0f0bSmrg 527*8feb0f0bSmrg #if (defined __STDC_WANT_IEC_60559_DFP_EXT__ \ 528*8feb0f0bSmrg || (defined __STDC_VERSION__ && __STDC_VERSION__ > 201710L)) 529*8feb0f0bSmrg 530*8feb0f0bSmrg /* Minimum subnormal positive floating-point number. */ 531*8feb0f0bSmrg #undef DEC32_TRUE_MIN 532*8feb0f0bSmrg #undef DEC64_TRUE_MIN 533*8feb0f0bSmrg #undef DEC128_TRUE_MIN 534*8feb0f0bSmrg #define DEC32_TRUE_MIN __DEC32_SUBNORMAL_MIN__ 535*8feb0f0bSmrg #define DEC64_TRUE_MIN __DEC64_SUBNORMAL_MIN__ 536*8feb0f0bSmrg #define DEC128_TRUE_MIN __DEC128_SUBNORMAL_MIN__ 537*8feb0f0bSmrg 538*8feb0f0bSmrg #endif /* __STDC_WANT_IEC_60559_DFP_EXT__ || C2X. */ 539*8feb0f0bSmrg 540*8feb0f0bSmrg #endif /* __DEC32_MANT_DIG__ */ 54136ac495dSmrg 54236ac495dSmrg #endif /* _FLOAT_H___ */ 543