kit

kit
git clone https://git.ryansepassi.com/git/kit.git
Log | Files | Refs | README

float.h (2154B)


      1 /* float.h -- C11 7.7 -- Characteristics of floating types
      2  *
      3  * kit assumes the target's `float` is IEEE 754 binary32 and `double` is
      4  * IEEE 754 binary64. Every value below for FLT_* / DBL_* follows directly
      5  * from those formats and is hardcoded.
      6  *
      7  * `long double` is *not* fixed: x86 uses 80-bit extended, AArch64 uses
      8  * binary128 (or binary64), PowerPC uses double-double, MSVC aliases it to
      9  * binary64, etc. Same story for FLT_ROUNDS (runtime) and FLT_EVAL_METHOD
     10  * (x87 vs SSE vs embedded). Those stay compiler-supplied.
     11  */
     12 #ifndef KIT_FLOAT_H
     13 #define KIT_FLOAT_H
     14 
     15 /* ---- target-varying ---------------------------------------------- */
     16 #define FLT_ROUNDS (__builtin_flt_rounds())
     17 #define FLT_EVAL_METHOD __FLT_EVAL_METHOD__
     18 
     19 #define LDBL_HAS_SUBNORM __LDBL_HAS_DENORM__
     20 #define LDBL_MANT_DIG __LDBL_MANT_DIG__
     21 #define LDBL_DECIMAL_DIG __LDBL_DECIMAL_DIG__
     22 #define LDBL_DIG __LDBL_DIG__
     23 #define LDBL_MIN_EXP __LDBL_MIN_EXP__
     24 #define LDBL_MIN_10_EXP __LDBL_MIN_10_EXP__
     25 #define LDBL_MAX_EXP __LDBL_MAX_EXP__
     26 #define LDBL_MAX_10_EXP __LDBL_MAX_10_EXP__
     27 #define LDBL_MAX __LDBL_MAX__
     28 #define LDBL_EPSILON __LDBL_EPSILON__
     29 #define LDBL_MIN __LDBL_MIN__
     30 #define LDBL_TRUE_MIN __LDBL_DENORM_MIN__
     31 
     32 /* DECIMAL_DIG = max of FLT/DBL/LDBL_DECIMAL_DIG. Since LDBL varies, this
     33    does too -- compiler-provided. */
     34 #define DECIMAL_DIG __DECIMAL_DIG__
     35 
     36 /* ---- IEEE 754 invariants ----------------------------------------- */
     37 #define FLT_RADIX 2
     38 
     39 /* binary32 (float) */
     40 #define FLT_HAS_SUBNORM 1
     41 #define FLT_MANT_DIG 24
     42 #define FLT_DECIMAL_DIG 9
     43 #define FLT_DIG 6
     44 #define FLT_MIN_EXP (-125)
     45 #define FLT_MIN_10_EXP (-37)
     46 #define FLT_MAX_EXP 128
     47 #define FLT_MAX_10_EXP 38
     48 #define FLT_MAX 0x1.fffffep+127f
     49 #define FLT_EPSILON 0x1p-23f
     50 #define FLT_MIN 0x1p-126f
     51 #define FLT_TRUE_MIN 0x1p-149f
     52 
     53 /* binary64 (double) */
     54 #define DBL_HAS_SUBNORM 1
     55 #define DBL_MANT_DIG 53
     56 #define DBL_DECIMAL_DIG 17
     57 #define DBL_DIG 15
     58 #define DBL_MIN_EXP (-1021)
     59 #define DBL_MIN_10_EXP (-307)
     60 #define DBL_MAX_EXP 1024
     61 #define DBL_MAX_10_EXP 308
     62 #define DBL_MAX 0x1.fffffffffffffp+1023
     63 #define DBL_EPSILON 0x1p-52
     64 #define DBL_MIN 0x1p-1022
     65 #define DBL_TRUE_MIN 0x1p-1074
     66 
     67 #endif