xref: /netbsd-src/external/gpl3/gcc.old/dist/gcc/ginclude/float.h (revision 8feb0f0b7eaff0608f8350bbfa3098827b4bb91b)
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