* g++.dg/debug/dwarf2/ref-3.C: XFAIL AIX.
[official-gcc.git] / gcc / ginclude / float.h
blob421f7351e37477760fcbcd506061739a1ce1cadd
1 /* Copyright (C) 2002-2016 Free Software Foundation, Inc.
3 This file is part of GCC.
5 GCC is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 3, or (at your option)
8 any later version.
10 GCC 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
13 GNU General Public License for more details.
15 Under Section 7 of GPL version 3, you are granted additional
16 permissions described in the GCC Runtime Library Exception, version
17 3.1, as published by the Free Software Foundation.
19 You should have received a copy of the GNU General Public License and
20 a copy of the GCC Runtime Library Exception along with this program;
21 see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
22 <http://www.gnu.org/licenses/>. */
25 * ISO C Standard: 5.2.4.2.2 Characteristics of floating types <float.h>
28 #ifndef _FLOAT_H___
29 #define _FLOAT_H___
31 /* Radix of exponent representation, b. */
32 #undef FLT_RADIX
33 #define FLT_RADIX __FLT_RADIX__
35 /* Number of base-FLT_RADIX digits in the significand, p. */
36 #undef FLT_MANT_DIG
37 #undef DBL_MANT_DIG
38 #undef LDBL_MANT_DIG
39 #define FLT_MANT_DIG __FLT_MANT_DIG__
40 #define DBL_MANT_DIG __DBL_MANT_DIG__
41 #define LDBL_MANT_DIG __LDBL_MANT_DIG__
43 /* Number of decimal digits, q, such that any floating-point number with q
44 decimal digits can be rounded into a floating-point number with p radix b
45 digits and back again without change to the q decimal digits,
47 p * log10(b) if b is a power of 10
48 floor((p - 1) * log10(b)) otherwise
50 #undef FLT_DIG
51 #undef DBL_DIG
52 #undef LDBL_DIG
53 #define FLT_DIG __FLT_DIG__
54 #define DBL_DIG __DBL_DIG__
55 #define LDBL_DIG __LDBL_DIG__
57 /* Minimum int x such that FLT_RADIX**(x-1) is a normalized float, emin */
58 #undef FLT_MIN_EXP
59 #undef DBL_MIN_EXP
60 #undef LDBL_MIN_EXP
61 #define FLT_MIN_EXP __FLT_MIN_EXP__
62 #define DBL_MIN_EXP __DBL_MIN_EXP__
63 #define LDBL_MIN_EXP __LDBL_MIN_EXP__
65 /* Minimum negative integer such that 10 raised to that power is in the
66 range of normalized floating-point numbers,
68 ceil(log10(b) * (emin - 1))
70 #undef FLT_MIN_10_EXP
71 #undef DBL_MIN_10_EXP
72 #undef LDBL_MIN_10_EXP
73 #define FLT_MIN_10_EXP __FLT_MIN_10_EXP__
74 #define DBL_MIN_10_EXP __DBL_MIN_10_EXP__
75 #define LDBL_MIN_10_EXP __LDBL_MIN_10_EXP__
77 /* Maximum int x such that FLT_RADIX**(x-1) is a representable float, emax. */
78 #undef FLT_MAX_EXP
79 #undef DBL_MAX_EXP
80 #undef LDBL_MAX_EXP
81 #define FLT_MAX_EXP __FLT_MAX_EXP__
82 #define DBL_MAX_EXP __DBL_MAX_EXP__
83 #define LDBL_MAX_EXP __LDBL_MAX_EXP__
85 /* Maximum integer such that 10 raised to that power is in the range of
86 representable finite floating-point numbers,
88 floor(log10((1 - b**-p) * b**emax))
90 #undef FLT_MAX_10_EXP
91 #undef DBL_MAX_10_EXP
92 #undef LDBL_MAX_10_EXP
93 #define FLT_MAX_10_EXP __FLT_MAX_10_EXP__
94 #define DBL_MAX_10_EXP __DBL_MAX_10_EXP__
95 #define LDBL_MAX_10_EXP __LDBL_MAX_10_EXP__
97 /* Maximum representable finite floating-point number,
99 (1 - b**-p) * b**emax
101 #undef FLT_MAX
102 #undef DBL_MAX
103 #undef LDBL_MAX
104 #define FLT_MAX __FLT_MAX__
105 #define DBL_MAX __DBL_MAX__
106 #define LDBL_MAX __LDBL_MAX__
108 /* The difference between 1 and the least value greater than 1 that is
109 representable in the given floating point type, b**1-p. */
110 #undef FLT_EPSILON
111 #undef DBL_EPSILON
112 #undef LDBL_EPSILON
113 #define FLT_EPSILON __FLT_EPSILON__
114 #define DBL_EPSILON __DBL_EPSILON__
115 #define LDBL_EPSILON __LDBL_EPSILON__
117 /* Minimum normalized positive floating-point number, b**(emin - 1). */
118 #undef FLT_MIN
119 #undef DBL_MIN
120 #undef LDBL_MIN
121 #define FLT_MIN __FLT_MIN__
122 #define DBL_MIN __DBL_MIN__
123 #define LDBL_MIN __LDBL_MIN__
125 /* Addition rounds to 0: zero, 1: nearest, 2: +inf, 3: -inf, -1: unknown. */
126 /* ??? This is supposed to change with calls to fesetround in <fenv.h>. */
127 #undef FLT_ROUNDS
128 #define FLT_ROUNDS 1
130 #if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) \
131 || (defined (__cplusplus) && __cplusplus >= 201103L)
132 /* The floating-point expression evaluation method.
133 -1 indeterminate
134 0 evaluate all operations and constants just to the range and
135 precision of the type
136 1 evaluate operations and constants of type float and double
137 to the range and precision of the double type, evaluate
138 long double operations and constants to the range and
139 precision of the long double type
140 2 evaluate all operations and constants to the range and
141 precision of the long double type
143 ??? This ought to change with the setting of the fp control word;
144 the value provided by the compiler assumes the widest setting. */
145 #undef FLT_EVAL_METHOD
146 #define FLT_EVAL_METHOD __FLT_EVAL_METHOD__
148 /* Number of decimal digits, n, such that any floating-point number in the
149 widest supported floating type with pmax radix b digits can be rounded
150 to a floating-point number with n decimal digits and back again without
151 change to the value,
153 pmax * log10(b) if b is a power of 10
154 ceil(1 + pmax * log10(b)) otherwise
156 #undef DECIMAL_DIG
157 #define DECIMAL_DIG __DECIMAL_DIG__
159 #endif /* C99 */
161 #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
162 /* Versions of DECIMAL_DIG for each floating-point type. */
163 #undef FLT_DECIMAL_DIG
164 #undef DBL_DECIMAL_DIG
165 #undef LDBL_DECIMAL_DIG
166 #define FLT_DECIMAL_DIG __FLT_DECIMAL_DIG__
167 #define DBL_DECIMAL_DIG __DBL_DECIMAL_DIG__
168 #define LDBL_DECIMAL_DIG __LDBL_DECIMAL_DIG__
170 /* Whether types support subnormal numbers. */
171 #undef FLT_HAS_SUBNORM
172 #undef DBL_HAS_SUBNORM
173 #undef LDBL_HAS_SUBNORM
174 #define FLT_HAS_SUBNORM __FLT_HAS_DENORM__
175 #define DBL_HAS_SUBNORM __DBL_HAS_DENORM__
176 #define LDBL_HAS_SUBNORM __LDBL_HAS_DENORM__
178 /* Minimum positive values, including subnormals. */
179 #undef FLT_TRUE_MIN
180 #undef DBL_TRUE_MIN
181 #undef LDBL_TRUE_MIN
182 #define FLT_TRUE_MIN __FLT_DENORM_MIN__
183 #define DBL_TRUE_MIN __DBL_DENORM_MIN__
184 #define LDBL_TRUE_MIN __LDBL_DENORM_MIN__
186 #endif /* C11 */
188 #ifdef __STDC_WANT_IEC_60559_BFP_EXT__
189 /* Number of decimal digits for which conversions between decimal
190 character strings and binary formats, in both directions, are
191 correctly rounded. */
192 #define CR_DECIMAL_DIG __UINTMAX_MAX__
193 #endif
195 #ifdef __STDC_WANT_IEC_60559_TYPES_EXT__
196 /* Constants for _FloatN and _FloatNx types from TS 18661-3. See
197 comments above for their semantics. */
199 #ifdef __FLT16_MANT_DIG__
200 #undef FLT16_MANT_DIG
201 #define FLT16_MANT_DIG __FLT16_MANT_DIG__
202 #undef FLT16_DIG
203 #define FLT16_DIG __FLT16_DIG__
204 #undef FLT16_MIN_EXP
205 #define FLT16_MIN_EXP __FLT16_MIN_EXP__
206 #undef FLT16_MIN_10_EXP
207 #define FLT16_MIN_10_EXP __FLT16_MIN_10_EXP__
208 #undef FLT16_MAX_EXP
209 #define FLT16_MAX_EXP __FLT16_MAX_EXP__
210 #undef FLT16_MAX_10_EXP
211 #define FLT16_MAX_10_EXP __FLT16_MAX_10_EXP__
212 #undef FLT16_MAX
213 #define FLT16_MAX __FLT16_MAX__
214 #undef FLT16_EPSILON
215 #define FLT16_EPSILON __FLT16_EPSILON__
216 #undef FLT16_MIN
217 #define FLT16_MIN __FLT16_MIN__
218 #undef FLT16_DECIMAL_DIG
219 #define FLT16_DECIMAL_DIG __FLT16_DECIMAL_DIG__
220 #undef FLT16_TRUE_MIN
221 #define FLT16_TRUE_MIN __FLT16_DENORM_MIN__
222 #endif /* __FLT16_MANT_DIG__. */
224 #ifdef __FLT32_MANT_DIG__
225 #undef FLT32_MANT_DIG
226 #define FLT32_MANT_DIG __FLT32_MANT_DIG__
227 #undef FLT32_DIG
228 #define FLT32_DIG __FLT32_DIG__
229 #undef FLT32_MIN_EXP
230 #define FLT32_MIN_EXP __FLT32_MIN_EXP__
231 #undef FLT32_MIN_10_EXP
232 #define FLT32_MIN_10_EXP __FLT32_MIN_10_EXP__
233 #undef FLT32_MAX_EXP
234 #define FLT32_MAX_EXP __FLT32_MAX_EXP__
235 #undef FLT32_MAX_10_EXP
236 #define FLT32_MAX_10_EXP __FLT32_MAX_10_EXP__
237 #undef FLT32_MAX
238 #define FLT32_MAX __FLT32_MAX__
239 #undef FLT32_EPSILON
240 #define FLT32_EPSILON __FLT32_EPSILON__
241 #undef FLT32_MIN
242 #define FLT32_MIN __FLT32_MIN__
243 #undef FLT32_DECIMAL_DIG
244 #define FLT32_DECIMAL_DIG __FLT32_DECIMAL_DIG__
245 #undef FLT32_TRUE_MIN
246 #define FLT32_TRUE_MIN __FLT32_DENORM_MIN__
247 #endif /* __FLT32_MANT_DIG__. */
249 #ifdef __FLT64_MANT_DIG__
250 #undef FLT64_MANT_DIG
251 #define FLT64_MANT_DIG __FLT64_MANT_DIG__
252 #undef FLT64_DIG
253 #define FLT64_DIG __FLT64_DIG__
254 #undef FLT64_MIN_EXP
255 #define FLT64_MIN_EXP __FLT64_MIN_EXP__
256 #undef FLT64_MIN_10_EXP
257 #define FLT64_MIN_10_EXP __FLT64_MIN_10_EXP__
258 #undef FLT64_MAX_EXP
259 #define FLT64_MAX_EXP __FLT64_MAX_EXP__
260 #undef FLT64_MAX_10_EXP
261 #define FLT64_MAX_10_EXP __FLT64_MAX_10_EXP__
262 #undef FLT64_MAX
263 #define FLT64_MAX __FLT64_MAX__
264 #undef FLT64_EPSILON
265 #define FLT64_EPSILON __FLT64_EPSILON__
266 #undef FLT64_MIN
267 #define FLT64_MIN __FLT64_MIN__
268 #undef FLT64_DECIMAL_DIG
269 #define FLT64_DECIMAL_DIG __FLT64_DECIMAL_DIG__
270 #undef FLT64_TRUE_MIN
271 #define FLT64_TRUE_MIN __FLT64_DENORM_MIN__
272 #endif /* __FLT64_MANT_DIG__. */
274 #ifdef __FLT128_MANT_DIG__
275 #undef FLT128_MANT_DIG
276 #define FLT128_MANT_DIG __FLT128_MANT_DIG__
277 #undef FLT128_DIG
278 #define FLT128_DIG __FLT128_DIG__
279 #undef FLT128_MIN_EXP
280 #define FLT128_MIN_EXP __FLT128_MIN_EXP__
281 #undef FLT128_MIN_10_EXP
282 #define FLT128_MIN_10_EXP __FLT128_MIN_10_EXP__
283 #undef FLT128_MAX_EXP
284 #define FLT128_MAX_EXP __FLT128_MAX_EXP__
285 #undef FLT128_MAX_10_EXP
286 #define FLT128_MAX_10_EXP __FLT128_MAX_10_EXP__
287 #undef FLT128_MAX
288 #define FLT128_MAX __FLT128_MAX__
289 #undef FLT128_EPSILON
290 #define FLT128_EPSILON __FLT128_EPSILON__
291 #undef FLT128_MIN
292 #define FLT128_MIN __FLT128_MIN__
293 #undef FLT128_DECIMAL_DIG
294 #define FLT128_DECIMAL_DIG __FLT128_DECIMAL_DIG__
295 #undef FLT128_TRUE_MIN
296 #define FLT128_TRUE_MIN __FLT128_DENORM_MIN__
297 #endif /* __FLT128_MANT_DIG__. */
299 #ifdef __FLT32X_MANT_DIG__
300 #undef FLT32X_MANT_DIG
301 #define FLT32X_MANT_DIG __FLT32X_MANT_DIG__
302 #undef FLT32X_DIG
303 #define FLT32X_DIG __FLT32X_DIG__
304 #undef FLT32X_MIN_EXP
305 #define FLT32X_MIN_EXP __FLT32X_MIN_EXP__
306 #undef FLT32X_MIN_10_EXP
307 #define FLT32X_MIN_10_EXP __FLT32X_MIN_10_EXP__
308 #undef FLT32X_MAX_EXP
309 #define FLT32X_MAX_EXP __FLT32X_MAX_EXP__
310 #undef FLT32X_MAX_10_EXP
311 #define FLT32X_MAX_10_EXP __FLT32X_MAX_10_EXP__
312 #undef FLT32X_MAX
313 #define FLT32X_MAX __FLT32X_MAX__
314 #undef FLT32X_EPSILON
315 #define FLT32X_EPSILON __FLT32X_EPSILON__
316 #undef FLT32X_MIN
317 #define FLT32X_MIN __FLT32X_MIN__
318 #undef FLT32X_DECIMAL_DIG
319 #define FLT32X_DECIMAL_DIG __FLT32X_DECIMAL_DIG__
320 #undef FLT32X_TRUE_MIN
321 #define FLT32X_TRUE_MIN __FLT32X_DENORM_MIN__
322 #endif /* __FLT32X_MANT_DIG__. */
324 #ifdef __FLT64X_MANT_DIG__
325 #undef FLT64X_MANT_DIG
326 #define FLT64X_MANT_DIG __FLT64X_MANT_DIG__
327 #undef FLT64X_DIG
328 #define FLT64X_DIG __FLT64X_DIG__
329 #undef FLT64X_MIN_EXP
330 #define FLT64X_MIN_EXP __FLT64X_MIN_EXP__
331 #undef FLT64X_MIN_10_EXP
332 #define FLT64X_MIN_10_EXP __FLT64X_MIN_10_EXP__
333 #undef FLT64X_MAX_EXP
334 #define FLT64X_MAX_EXP __FLT64X_MAX_EXP__
335 #undef FLT64X_MAX_10_EXP
336 #define FLT64X_MAX_10_EXP __FLT64X_MAX_10_EXP__
337 #undef FLT64X_MAX
338 #define FLT64X_MAX __FLT64X_MAX__
339 #undef FLT64X_EPSILON
340 #define FLT64X_EPSILON __FLT64X_EPSILON__
341 #undef FLT64X_MIN
342 #define FLT64X_MIN __FLT64X_MIN__
343 #undef FLT64X_DECIMAL_DIG
344 #define FLT64X_DECIMAL_DIG __FLT64X_DECIMAL_DIG__
345 #undef FLT64X_TRUE_MIN
346 #define FLT64X_TRUE_MIN __FLT64X_DENORM_MIN__
347 #endif /* __FLT64X_MANT_DIG__. */
349 #ifdef __FLT128X_MANT_DIG__
350 #undef FLT128X_MANT_DIG
351 #define FLT128X_MANT_DIG __FLT128X_MANT_DIG__
352 #undef FLT128X_DIG
353 #define FLT128X_DIG __FLT128X_DIG__
354 #undef FLT128X_MIN_EXP
355 #define FLT128X_MIN_EXP __FLT128X_MIN_EXP__
356 #undef FLT128X_MIN_10_EXP
357 #define FLT128X_MIN_10_EXP __FLT128X_MIN_10_EXP__
358 #undef FLT128X_MAX_EXP
359 #define FLT128X_MAX_EXP __FLT128X_MAX_EXP__
360 #undef FLT128X_MAX_10_EXP
361 #define FLT128X_MAX_10_EXP __FLT128X_MAX_10_EXP__
362 #undef FLT128X_MAX
363 #define FLT128X_MAX __FLT128X_MAX__
364 #undef FLT128X_EPSILON
365 #define FLT128X_EPSILON __FLT128X_EPSILON__
366 #undef FLT128X_MIN
367 #define FLT128X_MIN __FLT128X_MIN__
368 #undef FLT128X_DECIMAL_DIG
369 #define FLT128X_DECIMAL_DIG __FLT128X_DECIMAL_DIG__
370 #undef FLT128X_TRUE_MIN
371 #define FLT128X_TRUE_MIN __FLT128X_DENORM_MIN__
372 #endif /* __FLT128X_MANT_DIG__. */
374 #endif /* __STDC_WANT_IEC_60559_TYPES_EXT__. */
376 #ifdef __STDC_WANT_DEC_FP__
377 /* Draft Technical Report 24732, extension for decimal floating-point
378 arithmetic: Characteristic of decimal floating types <float.h>. */
380 /* Number of base-FLT_RADIX digits in the significand, p. */
381 #undef DEC32_MANT_DIG
382 #undef DEC64_MANT_DIG
383 #undef DEC128_MANT_DIG
384 #define DEC32_MANT_DIG __DEC32_MANT_DIG__
385 #define DEC64_MANT_DIG __DEC64_MANT_DIG__
386 #define DEC128_MANT_DIG __DEC128_MANT_DIG__
388 /* Minimum exponent. */
389 #undef DEC32_MIN_EXP
390 #undef DEC64_MIN_EXP
391 #undef DEC128_MIN_EXP
392 #define DEC32_MIN_EXP __DEC32_MIN_EXP__
393 #define DEC64_MIN_EXP __DEC64_MIN_EXP__
394 #define DEC128_MIN_EXP __DEC128_MIN_EXP__
396 /* Maximum exponent. */
397 #undef DEC32_MAX_EXP
398 #undef DEC64_MAX_EXP
399 #undef DEC128_MAX_EXP
400 #define DEC32_MAX_EXP __DEC32_MAX_EXP__
401 #define DEC64_MAX_EXP __DEC64_MAX_EXP__
402 #define DEC128_MAX_EXP __DEC128_MAX_EXP__
404 /* Maximum representable finite decimal floating-point number
405 (there are 6, 15, and 33 9s after the decimal points respectively). */
406 #undef DEC32_MAX
407 #undef DEC64_MAX
408 #undef DEC128_MAX
409 #define DEC32_MAX __DEC32_MAX__
410 #define DEC64_MAX __DEC64_MAX__
411 #define DEC128_MAX __DEC128_MAX__
413 /* The difference between 1 and the least value greater than 1 that is
414 representable in the given floating point type. */
415 #undef DEC32_EPSILON
416 #undef DEC64_EPSILON
417 #undef DEC128_EPSILON
418 #define DEC32_EPSILON __DEC32_EPSILON__
419 #define DEC64_EPSILON __DEC64_EPSILON__
420 #define DEC128_EPSILON __DEC128_EPSILON__
422 /* Minimum normalized positive floating-point number. */
423 #undef DEC32_MIN
424 #undef DEC64_MIN
425 #undef DEC128_MIN
426 #define DEC32_MIN __DEC32_MIN__
427 #define DEC64_MIN __DEC64_MIN__
428 #define DEC128_MIN __DEC128_MIN__
430 /* Minimum subnormal positive floating-point number. */
431 #undef DEC32_SUBNORMAL_MIN
432 #undef DEC64_SUBNORMAL_MIN
433 #undef DEC128_SUBNORMAL_MIN
434 #define DEC32_SUBNORMAL_MIN __DEC32_SUBNORMAL_MIN__
435 #define DEC64_SUBNORMAL_MIN __DEC64_SUBNORMAL_MIN__
436 #define DEC128_SUBNORMAL_MIN __DEC128_SUBNORMAL_MIN__
438 /* The floating-point expression evaluation method.
439 -1 indeterminate
440 0 evaluate all operations and constants just to the range and
441 precision of the type
442 1 evaluate operations and constants of type _Decimal32
443 and _Decimal64 to the range and precision of the _Decimal64
444 type, evaluate _Decimal128 operations and constants to the
445 range and precision of the _Decimal128 type;
446 2 evaluate all operations and constants to the range and
447 precision of the _Decimal128 type. */
449 #undef DEC_EVAL_METHOD
450 #define DEC_EVAL_METHOD __DEC_EVAL_METHOD__
452 #endif /* __STDC_WANT_DEC_FP__ */
454 #endif /* _FLOAT_H___ */