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