float.h revision 234353
1193326Sed/*===---- float.h - Characteristics of floating point types ----------------===
2193326Sed *
3193326Sed * Permission is hereby granted, free of charge, to any person obtaining a copy
4193326Sed * of this software and associated documentation files (the "Software"), to deal
5193326Sed * in the Software without restriction, including without limitation the rights
6193326Sed * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7193326Sed * copies of the Software, and to permit persons to whom the Software is
8193326Sed * furnished to do so, subject to the following conditions:
9193326Sed *
10193326Sed * The above copyright notice and this permission notice shall be included in
11193326Sed * all copies or substantial portions of the Software.
12193326Sed *
13193326Sed * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14193326Sed * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15193326Sed * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16193326Sed * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17193326Sed * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18193326Sed * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19193326Sed * THE SOFTWARE.
20193326Sed *
21193326Sed *===-----------------------------------------------------------------------===
22193326Sed */
23193326Sed
24193326Sed#ifndef __FLOAT_H
25193326Sed#define __FLOAT_H
26193326Sed
27226633Sdim/* If we're on MinGW, fall back to the system's float.h, which might have
28224145Sdim * additional definitions provided for Windows.
29224145Sdim * For more details see http://msdn.microsoft.com/en-us/library/y0ybw9fy.aspx
30224145Sdim */
31224145Sdim#if defined(__MINGW32__) && \
32224145Sdim    defined(__has_include_next) && __has_include_next(<float.h>)
33224145Sdim#  include_next <float.h>
34224145Sdim
35224145Sdim/* Undefine anything that we'll be redefining below. */
36224145Sdim#  undef FLT_EVAL_METHOD
37224145Sdim#  undef FLT_ROUNDS
38224145Sdim#  undef FLT_RADIX
39224145Sdim#  undef FLT_MANT_DIG
40224145Sdim#  undef DBL_MANT_DIG
41224145Sdim#  undef LDBL_MANT_DIG
42224145Sdim#  undef DECIMAL_DIG
43224145Sdim#  undef FLT_DIG
44224145Sdim#  undef DBL_DIG
45224145Sdim#  undef LDBL_DIG
46224145Sdim#  undef FLT_MIN_EXP
47224145Sdim#  undef DBL_MIN_EXP
48224145Sdim#  undef LDBL_MIN_EXP
49224145Sdim#  undef FLT_MIN_10_EXP
50224145Sdim#  undef DBL_MIN_10_EXP
51224145Sdim#  undef LDBL_MIN_10_EXP
52224145Sdim#  undef FLT_MAX_EXP
53224145Sdim#  undef DBL_MAX_EXP
54224145Sdim#  undef LDBL_MAX_EXP
55224145Sdim#  undef FLT_MAX_10_EXP
56224145Sdim#  undef DBL_MAX_10_EXP
57224145Sdim#  undef LDBL_MAX_10_EXP
58224145Sdim#  undef FLT_MAX
59224145Sdim#  undef DBL_MAX
60224145Sdim#  undef LDBL_MAX
61224145Sdim#  undef FLT_EPSILON
62224145Sdim#  undef DBL_EPSILON
63224145Sdim#  undef LDBL_EPSILON
64224145Sdim#  undef FLT_MIN
65224145Sdim#  undef DBL_MIN
66224145Sdim#  undef LDBL_MIN
67234353Sdim#  if __STDC_VERSION__ >= 201112L || !defined(__STRICT_ANSI__)
68234353Sdim#    undef FLT_TRUE_MIN
69234353Sdim#    undef DBL_TRUE_MIN
70234353Sdim#    undef LDBL_TRUE_MIN
71234353Sdim#  endif
72224145Sdim#endif
73224145Sdim
74193326Sed/* Characteristics of floating point types, C99 5.2.4.2.2 */
75193326Sed
76193326Sed#define FLT_EVAL_METHOD __FLT_EVAL_METHOD__
77193326Sed#define FLT_ROUNDS (__builtin_flt_rounds())
78193326Sed#define FLT_RADIX __FLT_RADIX__
79193326Sed
80193326Sed#define FLT_MANT_DIG __FLT_MANT_DIG__
81193326Sed#define DBL_MANT_DIG __DBL_MANT_DIG__
82193326Sed#define LDBL_MANT_DIG __LDBL_MANT_DIG__
83193326Sed
84193326Sed#define DECIMAL_DIG __DECIMAL_DIG__
85193326Sed
86193326Sed#define FLT_DIG __FLT_DIG__
87193326Sed#define DBL_DIG __DBL_DIG__
88193326Sed#define LDBL_DIG __LDBL_DIG__
89193326Sed
90193326Sed#define FLT_MIN_EXP __FLT_MIN_EXP__
91193326Sed#define DBL_MIN_EXP __DBL_MIN_EXP__
92193326Sed#define LDBL_MIN_EXP __LDBL_MIN_EXP__
93193326Sed
94193326Sed#define FLT_MIN_10_EXP __FLT_MIN_10_EXP__
95193326Sed#define DBL_MIN_10_EXP __DBL_MIN_10_EXP__
96193326Sed#define LDBL_MIN_10_EXP __LDBL_MIN_10_EXP__
97193326Sed
98193326Sed#define FLT_MAX_EXP __FLT_MAX_EXP__
99193326Sed#define DBL_MAX_EXP __DBL_MAX_EXP__
100193326Sed#define LDBL_MAX_EXP __LDBL_MAX_EXP__
101193326Sed
102193326Sed#define FLT_MAX_10_EXP __FLT_MAX_10_EXP__
103193326Sed#define DBL_MAX_10_EXP __DBL_MAX_10_EXP__
104193326Sed#define LDBL_MAX_10_EXP __LDBL_MAX_10_EXP__
105193326Sed
106193326Sed#define FLT_MAX __FLT_MAX__
107193326Sed#define DBL_MAX __DBL_MAX__
108193326Sed#define LDBL_MAX __LDBL_MAX__
109193326Sed
110193326Sed#define FLT_EPSILON __FLT_EPSILON__
111193326Sed#define DBL_EPSILON __DBL_EPSILON__
112193326Sed#define LDBL_EPSILON __LDBL_EPSILON__
113193326Sed
114193326Sed#define FLT_MIN __FLT_MIN__
115193326Sed#define DBL_MIN __DBL_MIN__
116193326Sed#define LDBL_MIN __LDBL_MIN__
117193326Sed
118234353Sdim#if __STDC_VERSION__ >= 201112L || !defined(__STRICT_ANSI__)
119234353Sdim#  define FLT_TRUE_MIN __FLT_DENORM_MIN__
120234353Sdim#  define DBL_TRUE_MIN __DBL_DENORM_MIN__
121234353Sdim#  define LDBL_TRUE_MIN __LDBL_DENORM_MIN__
122234353Sdim#endif
123234353Sdim
124193326Sed#endif /* __FLOAT_H */
125