float.h revision 353358
1178172Simp/*===---- float.h - Characteristics of floating point types ----------------=== 2178172Simp * 3178172Simp * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4178172Simp * See https://llvm.org/LICENSE.txt for license information. 5178172Simp * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6178172Simp * 7178172Simp *===-----------------------------------------------------------------------=== 8178172Simp */ 9178172Simp 10178172Simp#ifndef __CLANG_FLOAT_H 11178172Simp#define __CLANG_FLOAT_H 12178172Simp 13178172Simp/* If we're on MinGW, fall back to the system's float.h, which might have 14178172Simp * additional definitions provided for Windows. 15178172Simp * For more details see http://msdn.microsoft.com/en-us/library/y0ybw9fy.aspx 16178172Simp * 17178172Simp * Also fall back on Darwin to allow additional definitions and 18178172Simp * implementation-defined values. 19178172Simp */ 20178172Simp#if (defined(__APPLE__) || (defined(__MINGW32__) || defined(_MSC_VER))) && \ 21178172Simp __STDC_HOSTED__ && __has_include_next(<float.h>) 22178172Simp 23178172Simp/* Prior to Apple's 10.7 SDK, float.h SDK header used to apply an extra level 24178172Simp * of #include_next<float.h> to keep Metrowerks compilers happy. Avoid this 25178172Simp * extra indirection. 26178172Simp */ 27178172Simp#ifdef __APPLE__ 28178172Simp#define _FLOAT_H_ 29178172Simp#endif 30178172Simp 31178172Simp# include_next <float.h> 32178172Simp 33178172Simp/* Undefine anything that we'll be redefining below. */ 34178172Simp# undef FLT_EVAL_METHOD 35178172Simp# undef FLT_ROUNDS 36178172Simp# undef FLT_RADIX 37178172Simp# undef FLT_MANT_DIG 38178172Simp# undef DBL_MANT_DIG 39178172Simp# undef LDBL_MANT_DIG 40178172Simp# if __STDC_VERSION__ >= 199901L || !defined(__STRICT_ANSI__) || __cplusplus >= 201103L 41178172Simp# undef DECIMAL_DIG 42196994Sphk# endif 43196994Sphk# undef FLT_DIG 44178172Simp# undef DBL_DIG 45196994Sphk# undef LDBL_DIG 46196994Sphk# undef FLT_MIN_EXP 47178172Simp# undef DBL_MIN_EXP 48178172Simp# undef LDBL_MIN_EXP 49206717Sjmallett# undef FLT_MIN_10_EXP 50178172Simp# undef DBL_MIN_10_EXP 51178172Simp# undef LDBL_MIN_10_EXP 52178172Simp# undef FLT_MAX_EXP 53178172Simp# undef DBL_MAX_EXP 54178172Simp# undef LDBL_MAX_EXP 55178172Simp# undef FLT_MAX_10_EXP 56178172Simp# undef DBL_MAX_10_EXP 57178172Simp# undef LDBL_MAX_10_EXP 58178172Simp# undef FLT_MAX 59178172Simp# undef DBL_MAX 60215971Sjmallett# undef LDBL_MAX 61215971Sjmallett# undef FLT_EPSILON 62233644Sjmallett# undef DBL_EPSILON 63232449Sjmallett# undef LDBL_EPSILON 64233644Sjmallett# undef FLT_MIN 65232449Sjmallett# undef DBL_MIN 66215971Sjmallett# undef LDBL_MIN 67233644Sjmallett# if __STDC_VERSION__ >= 201112L || !defined(__STRICT_ANSI__) || __cplusplus >= 201703L 68215971Sjmallett# undef FLT_TRUE_MIN 69233644Sjmallett# undef DBL_TRUE_MIN 70178172Simp# undef LDBL_TRUE_MIN 71215971Sjmallett# undef FLT_DECIMAL_DIG 72215971Sjmallett# undef DBL_DECIMAL_DIG 73215971Sjmallett# undef LDBL_DECIMAL_DIG 74232449Sjmallett# undef FLT_HAS_SUBNORM 75232449Sjmallett# undef DBL_HAS_SUBNORM 76232449Sjmallett# undef LDBL_HAS_SUBNORM 77215971Sjmallett# endif 78215971Sjmallett#endif 79215971Sjmallett 80215971Sjmallett/* Characteristics of floating point types, C99 5.2.4.2.2 */ 81215971Sjmallett 82215971Sjmallett#define FLT_EVAL_METHOD __FLT_EVAL_METHOD__ 83215971Sjmallett#define FLT_ROUNDS (__builtin_flt_rounds()) 84178172Simp#define FLT_RADIX __FLT_RADIX__ 85178172Simp 86178172Simp#define FLT_MANT_DIG __FLT_MANT_DIG__ 87178172Simp#define DBL_MANT_DIG __DBL_MANT_DIG__ 88178172Simp#define LDBL_MANT_DIG __LDBL_MANT_DIG__ 89178172Simp 90178172Simp#if __STDC_VERSION__ >= 199901L || !defined(__STRICT_ANSI__) || __cplusplus >= 201103L 91178172Simp# define DECIMAL_DIG __DECIMAL_DIG__ 92178172Simp#endif 93178172Simp 94178172Simp#define FLT_DIG __FLT_DIG__ 95208165Srrs#define DBL_DIG __DBL_DIG__ 96224207Sattilio#define LDBL_DIG __LDBL_DIG__ 97178172Simp 98224207Sattilio#define FLT_MIN_EXP __FLT_MIN_EXP__ 99178172Simp#define DBL_MIN_EXP __DBL_MIN_EXP__ 100178172Simp#define LDBL_MIN_EXP __LDBL_MIN_EXP__ 101178172Simp 102178172Simp#define FLT_MIN_10_EXP __FLT_MIN_10_EXP__ 103178172Simp#define DBL_MIN_10_EXP __DBL_MIN_10_EXP__ 104250338Sattilio#define LDBL_MIN_10_EXP __LDBL_MIN_10_EXP__ 105250338Sattilio 106250338Sattilio#define FLT_MAX_EXP __FLT_MAX_EXP__ 107250338Sattilio#define DBL_MAX_EXP __DBL_MAX_EXP__ 108178172Simp#define LDBL_MAX_EXP __LDBL_MAX_EXP__ 109178172Simp 110178172Simp#define FLT_MAX_10_EXP __FLT_MAX_10_EXP__ 111178172Simp#define DBL_MAX_10_EXP __DBL_MAX_10_EXP__ 112178172Simp#define LDBL_MAX_10_EXP __LDBL_MAX_10_EXP__ 113178172Simp 114178172Simp#define FLT_MAX __FLT_MAX__ 115178172Simp#define DBL_MAX __DBL_MAX__ 116195376Ssam#define LDBL_MAX __LDBL_MAX__ 117195376Ssam 118195376Ssam#define FLT_EPSILON __FLT_EPSILON__ 119195376Ssam#define DBL_EPSILON __DBL_EPSILON__ 120195376Ssam#define LDBL_EPSILON __LDBL_EPSILON__ 121195376Ssam 122202031Simp#define FLT_MIN __FLT_MIN__ 123178172Simp#define DBL_MIN __DBL_MIN__ 124191278Srwatson#define LDBL_MIN __LDBL_MIN__ 125191278Srwatson 126191278Srwatson#if __STDC_VERSION__ >= 201112L || !defined(__STRICT_ANSI__) || __cplusplus >= 201703L 127191278Srwatson# define FLT_TRUE_MIN __FLT_DENORM_MIN__ 128191276Srwatson# define DBL_TRUE_MIN __DBL_DENORM_MIN__ 129191276Srwatson# define LDBL_TRUE_MIN __LDBL_DENORM_MIN__ 130191276Srwatson# define FLT_DECIMAL_DIG __FLT_DECIMAL_DIG__ 131217354Sjchandra# define DBL_DECIMAL_DIG __DBL_DECIMAL_DIG__ 132217354Sjchandra# define LDBL_DECIMAL_DIG __LDBL_DECIMAL_DIG__ 133217354Sjchandra# define FLT_HAS_SUBNORM __FLT_HAS_DENORM__ 134210627Sjchandra# define DBL_HAS_SUBNORM __DBL_HAS_DENORM__ 135217354Sjchandra# define LDBL_HAS_SUBNORM __LDBL_HAS_DENORM__ 136217354Sjchandra#endif 137178172Simp 138217354Sjchandra#ifdef __STDC_WANT_IEC_60559_TYPES_EXT__ 139217354Sjchandra# define FLT16_MANT_DIG __FLT16_MANT_DIG__ 140210846Sjchandra# define FLT16_DECIMAL_DIG __FLT16_DECIMAL_DIG__ 141217354Sjchandra# define FLT16_DIG __FLT16_DIG__ 142210846Sjchandra# define FLT16_MIN_EXP __FLT16_MIN_EXP__ 143210627Sjchandra# define FLT16_MIN_10_EXP __FLT16_MIN_10_EXP__ 144217354Sjchandra# define FLT16_MAX_EXP __FLT16_MAX_EXP__ 145217354Sjchandra# define FLT16_MAX_10_EXP __FLT16_MAX_10_EXP__ 146217354Sjchandra# define FLT16_MAX __FLT16_MAX__ 147217354Sjchandra# define FLT16_EPSILON __FLT16_EPSILON__ 148217354Sjchandra# define FLT16_MIN __FLT16_MIN__ 149217354Sjchandra# define FLT16_TRUE_MIN __FLT16_TRUE_MIN__ 150217354Sjchandra#endif /* __STDC_WANT_IEC_60559_TYPES_EXT__ */ 151217354Sjchandra 152217354Sjchandra#endif /* __CLANG_FLOAT_H */ 153217354Sjchandra