Home | History | Annotate | Line # | Download | only in Headers
      1  1.1  joerg /*===---- float.h - Characteristics of floating point types ----------------===
      2  1.1  joerg  *
      3  1.1  joerg  * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
      4  1.1  joerg  * See https://llvm.org/LICENSE.txt for license information.
      5  1.1  joerg  * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
      6  1.1  joerg  *
      7  1.1  joerg  *===-----------------------------------------------------------------------===
      8  1.1  joerg  */
      9  1.1  joerg 
     10  1.1  joerg #ifndef __CLANG_FLOAT_H
     11  1.1  joerg #define __CLANG_FLOAT_H
     12  1.1  joerg 
     13  1.1  joerg /* If we're on MinGW, fall back to the system's float.h, which might have
     14  1.1  joerg  * additional definitions provided for Windows.
     15  1.1  joerg  * For more details see http://msdn.microsoft.com/en-us/library/y0ybw9fy.aspx
     16  1.1  joerg  *
     17  1.1  joerg  * Also fall back on Darwin to allow additional definitions and
     18  1.1  joerg  * implementation-defined values.
     19  1.1  joerg  */
     20  1.1  joerg #if (defined(__APPLE__) || (defined(__MINGW32__) || defined(_MSC_VER))) && \
     21  1.1  joerg     __STDC_HOSTED__ && __has_include_next(<float.h>)
     22  1.1  joerg 
     23  1.1  joerg /* Prior to Apple's 10.7 SDK, float.h SDK header used to apply an extra level
     24  1.1  joerg  * of #include_next<float.h> to keep Metrowerks compilers happy. Avoid this
     25  1.1  joerg  * extra indirection.
     26  1.1  joerg  */
     27  1.1  joerg #ifdef __APPLE__
     28  1.1  joerg #define _FLOAT_H_
     29  1.1  joerg #endif
     30  1.1  joerg 
     31  1.1  joerg #  include_next <float.h>
     32  1.1  joerg 
     33  1.1  joerg /* Undefine anything that we'll be redefining below. */
     34  1.1  joerg #  undef FLT_EVAL_METHOD
     35  1.1  joerg #  undef FLT_ROUNDS
     36  1.1  joerg #  undef FLT_RADIX
     37  1.1  joerg #  undef FLT_MANT_DIG
     38  1.1  joerg #  undef DBL_MANT_DIG
     39  1.1  joerg #  undef LDBL_MANT_DIG
     40  1.1  joerg #  if __STDC_VERSION__ >= 199901L || !defined(__STRICT_ANSI__) || __cplusplus >= 201103L
     41  1.1  joerg #    undef DECIMAL_DIG
     42  1.1  joerg #  endif
     43  1.1  joerg #  undef FLT_DIG
     44  1.1  joerg #  undef DBL_DIG
     45  1.1  joerg #  undef LDBL_DIG
     46  1.1  joerg #  undef FLT_MIN_EXP
     47  1.1  joerg #  undef DBL_MIN_EXP
     48  1.1  joerg #  undef LDBL_MIN_EXP
     49  1.1  joerg #  undef FLT_MIN_10_EXP
     50  1.1  joerg #  undef DBL_MIN_10_EXP
     51  1.1  joerg #  undef LDBL_MIN_10_EXP
     52  1.1  joerg #  undef FLT_MAX_EXP
     53  1.1  joerg #  undef DBL_MAX_EXP
     54  1.1  joerg #  undef LDBL_MAX_EXP
     55  1.1  joerg #  undef FLT_MAX_10_EXP
     56  1.1  joerg #  undef DBL_MAX_10_EXP
     57  1.1  joerg #  undef LDBL_MAX_10_EXP
     58  1.1  joerg #  undef FLT_MAX
     59  1.1  joerg #  undef DBL_MAX
     60  1.1  joerg #  undef LDBL_MAX
     61  1.1  joerg #  undef FLT_EPSILON
     62  1.1  joerg #  undef DBL_EPSILON
     63  1.1  joerg #  undef LDBL_EPSILON
     64  1.1  joerg #  undef FLT_MIN
     65  1.1  joerg #  undef DBL_MIN
     66  1.1  joerg #  undef LDBL_MIN
     67  1.1  joerg #  if __STDC_VERSION__ >= 201112L || !defined(__STRICT_ANSI__) || __cplusplus >= 201703L
     68  1.1  joerg #    undef FLT_TRUE_MIN
     69  1.1  joerg #    undef DBL_TRUE_MIN
     70  1.1  joerg #    undef LDBL_TRUE_MIN
     71  1.1  joerg #    undef FLT_DECIMAL_DIG
     72  1.1  joerg #    undef DBL_DECIMAL_DIG
     73  1.1  joerg #    undef LDBL_DECIMAL_DIG
     74  1.1  joerg #    undef FLT_HAS_SUBNORM
     75  1.1  joerg #    undef DBL_HAS_SUBNORM
     76  1.1  joerg #    undef LDBL_HAS_SUBNORM
     77  1.1  joerg #  endif
     78  1.1  joerg #endif
     79  1.1  joerg 
     80  1.1  joerg /* Characteristics of floating point types, C99 5.2.4.2.2 */
     81  1.1  joerg 
     82  1.1  joerg #define FLT_EVAL_METHOD __FLT_EVAL_METHOD__
     83  1.1  joerg #define FLT_ROUNDS (__builtin_flt_rounds())
     84  1.1  joerg #define FLT_RADIX __FLT_RADIX__
     85  1.1  joerg 
     86  1.1  joerg #define FLT_MANT_DIG __FLT_MANT_DIG__
     87  1.1  joerg #define DBL_MANT_DIG __DBL_MANT_DIG__
     88  1.1  joerg #define LDBL_MANT_DIG __LDBL_MANT_DIG__
     89  1.1  joerg 
     90  1.1  joerg #if __STDC_VERSION__ >= 199901L || !defined(__STRICT_ANSI__) || __cplusplus >= 201103L
     91  1.1  joerg #  define DECIMAL_DIG __DECIMAL_DIG__
     92  1.1  joerg #endif
     93  1.1  joerg 
     94  1.1  joerg #define FLT_DIG __FLT_DIG__
     95  1.1  joerg #define DBL_DIG __DBL_DIG__
     96  1.1  joerg #define LDBL_DIG __LDBL_DIG__
     97  1.1  joerg 
     98  1.1  joerg #define FLT_MIN_EXP __FLT_MIN_EXP__
     99  1.1  joerg #define DBL_MIN_EXP __DBL_MIN_EXP__
    100  1.1  joerg #define LDBL_MIN_EXP __LDBL_MIN_EXP__
    101  1.1  joerg 
    102  1.1  joerg #define FLT_MIN_10_EXP __FLT_MIN_10_EXP__
    103  1.1  joerg #define DBL_MIN_10_EXP __DBL_MIN_10_EXP__
    104  1.1  joerg #define LDBL_MIN_10_EXP __LDBL_MIN_10_EXP__
    105  1.1  joerg 
    106  1.1  joerg #define FLT_MAX_EXP __FLT_MAX_EXP__
    107  1.1  joerg #define DBL_MAX_EXP __DBL_MAX_EXP__
    108  1.1  joerg #define LDBL_MAX_EXP __LDBL_MAX_EXP__
    109  1.1  joerg 
    110  1.1  joerg #define FLT_MAX_10_EXP __FLT_MAX_10_EXP__
    111  1.1  joerg #define DBL_MAX_10_EXP __DBL_MAX_10_EXP__
    112  1.1  joerg #define LDBL_MAX_10_EXP __LDBL_MAX_10_EXP__
    113  1.1  joerg 
    114  1.1  joerg #define FLT_MAX __FLT_MAX__
    115  1.1  joerg #define DBL_MAX __DBL_MAX__
    116  1.1  joerg #define LDBL_MAX __LDBL_MAX__
    117  1.1  joerg 
    118  1.1  joerg #define FLT_EPSILON __FLT_EPSILON__
    119  1.1  joerg #define DBL_EPSILON __DBL_EPSILON__
    120  1.1  joerg #define LDBL_EPSILON __LDBL_EPSILON__
    121  1.1  joerg 
    122  1.1  joerg #define FLT_MIN __FLT_MIN__
    123  1.1  joerg #define DBL_MIN __DBL_MIN__
    124  1.1  joerg #define LDBL_MIN __LDBL_MIN__
    125  1.1  joerg 
    126  1.1  joerg #if __STDC_VERSION__ >= 201112L || !defined(__STRICT_ANSI__) || __cplusplus >= 201703L
    127  1.1  joerg #  define FLT_TRUE_MIN __FLT_DENORM_MIN__
    128  1.1  joerg #  define DBL_TRUE_MIN __DBL_DENORM_MIN__
    129  1.1  joerg #  define LDBL_TRUE_MIN __LDBL_DENORM_MIN__
    130  1.1  joerg #  define FLT_DECIMAL_DIG __FLT_DECIMAL_DIG__
    131  1.1  joerg #  define DBL_DECIMAL_DIG __DBL_DECIMAL_DIG__
    132  1.1  joerg #  define LDBL_DECIMAL_DIG __LDBL_DECIMAL_DIG__
    133  1.1  joerg #  define FLT_HAS_SUBNORM __FLT_HAS_DENORM__
    134  1.1  joerg #  define DBL_HAS_SUBNORM __DBL_HAS_DENORM__
    135  1.1  joerg #  define LDBL_HAS_SUBNORM __LDBL_HAS_DENORM__
    136  1.1  joerg #endif
    137  1.1  joerg 
    138  1.1  joerg #ifdef __STDC_WANT_IEC_60559_TYPES_EXT__
    139  1.1  joerg #  define FLT16_MANT_DIG    __FLT16_MANT_DIG__
    140  1.1  joerg #  define FLT16_DECIMAL_DIG __FLT16_DECIMAL_DIG__
    141  1.1  joerg #  define FLT16_DIG         __FLT16_DIG__
    142  1.1  joerg #  define FLT16_MIN_EXP     __FLT16_MIN_EXP__
    143  1.1  joerg #  define FLT16_MIN_10_EXP  __FLT16_MIN_10_EXP__
    144  1.1  joerg #  define FLT16_MAX_EXP     __FLT16_MAX_EXP__
    145  1.1  joerg #  define FLT16_MAX_10_EXP  __FLT16_MAX_10_EXP__
    146  1.1  joerg #  define FLT16_MAX         __FLT16_MAX__
    147  1.1  joerg #  define FLT16_EPSILON     __FLT16_EPSILON__
    148  1.1  joerg #  define FLT16_MIN         __FLT16_MIN__
    149  1.1  joerg #  define FLT16_TRUE_MIN    __FLT16_TRUE_MIN__
    150  1.1  joerg #endif /* __STDC_WANT_IEC_60559_TYPES_EXT__ */
    151  1.1  joerg 
    152  1.1  joerg #endif /* __CLANG_FLOAT_H */
    153