1193326Sed/*===---- float.h - Characteristics of floating point types ----------------=== 2193326Sed * 3353358Sdim * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4353358Sdim * See https://llvm.org/LICENSE.txt for license information. 5353358Sdim * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6193326Sed * 7193326Sed *===-----------------------------------------------------------------------=== 8193326Sed */ 9193326Sed 10344779Sdim#ifndef __CLANG_FLOAT_H 11344779Sdim#define __CLANG_FLOAT_H 12193326Sed 13226633Sdim/* If we're on MinGW, fall back to the system's float.h, which might have 14224145Sdim * additional definitions provided for Windows. 15224145Sdim * For more details see http://msdn.microsoft.com/en-us/library/y0ybw9fy.aspx 16314564Sdim * 17314564Sdim * Also fall back on Darwin to allow additional definitions and 18314564Sdim * implementation-defined values. 19224145Sdim */ 20314564Sdim#if (defined(__APPLE__) || (defined(__MINGW32__) || defined(_MSC_VER))) && \ 21314564Sdim __STDC_HOSTED__ && __has_include_next(<float.h>) 22322320Sdim 23322320Sdim/* Prior to Apple's 10.7 SDK, float.h SDK header used to apply an extra level 24322320Sdim * of #include_next<float.h> to keep Metrowerks compilers happy. Avoid this 25322320Sdim * extra indirection. 26322320Sdim */ 27322320Sdim#ifdef __APPLE__ 28322320Sdim#define _FLOAT_H_ 29322320Sdim#endif 30322320Sdim 31224145Sdim# include_next <float.h> 32224145Sdim 33224145Sdim/* Undefine anything that we'll be redefining below. */ 34224145Sdim# undef FLT_EVAL_METHOD 35224145Sdim# undef FLT_ROUNDS 36224145Sdim# undef FLT_RADIX 37224145Sdim# undef FLT_MANT_DIG 38224145Sdim# undef DBL_MANT_DIG 39224145Sdim# undef LDBL_MANT_DIG 40353358Sdim# if __STDC_VERSION__ >= 199901L || !defined(__STRICT_ANSI__) || __cplusplus >= 201103L 41309124Sdim# undef DECIMAL_DIG 42309124Sdim# endif 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 67353358Sdim# if __STDC_VERSION__ >= 201112L || !defined(__STRICT_ANSI__) || __cplusplus >= 201703L 68234353Sdim# undef FLT_TRUE_MIN 69234353Sdim# undef DBL_TRUE_MIN 70234353Sdim# undef LDBL_TRUE_MIN 71309124Sdim# undef FLT_DECIMAL_DIG 72309124Sdim# undef DBL_DECIMAL_DIG 73309124Sdim# undef LDBL_DECIMAL_DIG 74344779Sdim# undef FLT_HAS_SUBNORM 75344779Sdim# undef DBL_HAS_SUBNORM 76344779Sdim# undef LDBL_HAS_SUBNORM 77234353Sdim# endif 78224145Sdim#endif 79224145Sdim 80193326Sed/* Characteristics of floating point types, C99 5.2.4.2.2 */ 81193326Sed 82193326Sed#define FLT_EVAL_METHOD __FLT_EVAL_METHOD__ 83193326Sed#define FLT_ROUNDS (__builtin_flt_rounds()) 84193326Sed#define FLT_RADIX __FLT_RADIX__ 85193326Sed 86193326Sed#define FLT_MANT_DIG __FLT_MANT_DIG__ 87193326Sed#define DBL_MANT_DIG __DBL_MANT_DIG__ 88193326Sed#define LDBL_MANT_DIG __LDBL_MANT_DIG__ 89193326Sed 90353358Sdim#if __STDC_VERSION__ >= 199901L || !defined(__STRICT_ANSI__) || __cplusplus >= 201103L 91309124Sdim# define DECIMAL_DIG __DECIMAL_DIG__ 92309124Sdim#endif 93193326Sed 94193326Sed#define FLT_DIG __FLT_DIG__ 95193326Sed#define DBL_DIG __DBL_DIG__ 96193326Sed#define LDBL_DIG __LDBL_DIG__ 97193326Sed 98193326Sed#define FLT_MIN_EXP __FLT_MIN_EXP__ 99193326Sed#define DBL_MIN_EXP __DBL_MIN_EXP__ 100193326Sed#define LDBL_MIN_EXP __LDBL_MIN_EXP__ 101193326Sed 102193326Sed#define FLT_MIN_10_EXP __FLT_MIN_10_EXP__ 103193326Sed#define DBL_MIN_10_EXP __DBL_MIN_10_EXP__ 104193326Sed#define LDBL_MIN_10_EXP __LDBL_MIN_10_EXP__ 105193326Sed 106193326Sed#define FLT_MAX_EXP __FLT_MAX_EXP__ 107193326Sed#define DBL_MAX_EXP __DBL_MAX_EXP__ 108193326Sed#define LDBL_MAX_EXP __LDBL_MAX_EXP__ 109193326Sed 110193326Sed#define FLT_MAX_10_EXP __FLT_MAX_10_EXP__ 111193326Sed#define DBL_MAX_10_EXP __DBL_MAX_10_EXP__ 112193326Sed#define LDBL_MAX_10_EXP __LDBL_MAX_10_EXP__ 113193326Sed 114193326Sed#define FLT_MAX __FLT_MAX__ 115193326Sed#define DBL_MAX __DBL_MAX__ 116193326Sed#define LDBL_MAX __LDBL_MAX__ 117193326Sed 118193326Sed#define FLT_EPSILON __FLT_EPSILON__ 119193326Sed#define DBL_EPSILON __DBL_EPSILON__ 120193326Sed#define LDBL_EPSILON __LDBL_EPSILON__ 121193326Sed 122193326Sed#define FLT_MIN __FLT_MIN__ 123193326Sed#define DBL_MIN __DBL_MIN__ 124193326Sed#define LDBL_MIN __LDBL_MIN__ 125193326Sed 126353358Sdim#if __STDC_VERSION__ >= 201112L || !defined(__STRICT_ANSI__) || __cplusplus >= 201703L 127234353Sdim# define FLT_TRUE_MIN __FLT_DENORM_MIN__ 128234353Sdim# define DBL_TRUE_MIN __DBL_DENORM_MIN__ 129234353Sdim# define LDBL_TRUE_MIN __LDBL_DENORM_MIN__ 130309124Sdim# define FLT_DECIMAL_DIG __FLT_DECIMAL_DIG__ 131309124Sdim# define DBL_DECIMAL_DIG __DBL_DECIMAL_DIG__ 132309124Sdim# define LDBL_DECIMAL_DIG __LDBL_DECIMAL_DIG__ 133344779Sdim# define FLT_HAS_SUBNORM __FLT_HAS_DENORM__ 134344779Sdim# define DBL_HAS_SUBNORM __DBL_HAS_DENORM__ 135344779Sdim# define LDBL_HAS_SUBNORM __LDBL_HAS_DENORM__ 136234353Sdim#endif 137234353Sdim 138327952Sdim#ifdef __STDC_WANT_IEC_60559_TYPES_EXT__ 139327952Sdim# define FLT16_MANT_DIG __FLT16_MANT_DIG__ 140327952Sdim# define FLT16_DECIMAL_DIG __FLT16_DECIMAL_DIG__ 141327952Sdim# define FLT16_DIG __FLT16_DIG__ 142327952Sdim# define FLT16_MIN_EXP __FLT16_MIN_EXP__ 143327952Sdim# define FLT16_MIN_10_EXP __FLT16_MIN_10_EXP__ 144327952Sdim# define FLT16_MAX_EXP __FLT16_MAX_EXP__ 145327952Sdim# define FLT16_MAX_10_EXP __FLT16_MAX_10_EXP__ 146327952Sdim# define FLT16_MAX __FLT16_MAX__ 147327952Sdim# define FLT16_EPSILON __FLT16_EPSILON__ 148327952Sdim# define FLT16_MIN __FLT16_MIN__ 149327952Sdim# define FLT16_TRUE_MIN __FLT16_TRUE_MIN__ 150327952Sdim#endif /* __STDC_WANT_IEC_60559_TYPES_EXT__ */ 151327952Sdim 152344779Sdim#endif /* __CLANG_FLOAT_H */ 153