1*53ee8cc1Swenshuai.xi /* Copyright (C) 2002 Free Software Foundation, Inc. 2*53ee8cc1Swenshuai.xi 3*53ee8cc1Swenshuai.xi This file is part of GCC. 4*53ee8cc1Swenshuai.xi 5*53ee8cc1Swenshuai.xi GCC is free software; you can redistribute it and/or modify 6*53ee8cc1Swenshuai.xi it under the terms of the GNU General Public License as published by 7*53ee8cc1Swenshuai.xi the Free Software Foundation; either version 2, or (at your option) 8*53ee8cc1Swenshuai.xi any later version. 9*53ee8cc1Swenshuai.xi 10*53ee8cc1Swenshuai.xi GCC is distributed in the hope that it will be useful, 11*53ee8cc1Swenshuai.xi but WITHOUT ANY WARRANTY; without even the implied warranty of 12*53ee8cc1Swenshuai.xi MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13*53ee8cc1Swenshuai.xi GNU General Public License for more details. 14*53ee8cc1Swenshuai.xi 15*53ee8cc1Swenshuai.xi You should have received a copy of the GNU General Public License 16*53ee8cc1Swenshuai.xi along with GCC; see the file COPYING. If not, write to 17*53ee8cc1Swenshuai.xi the Free Software Foundation, 51 Franklin Street, Fifth Floor, 18*53ee8cc1Swenshuai.xi Boston, MA 02110-1301, USA. */ 19*53ee8cc1Swenshuai.xi 20*53ee8cc1Swenshuai.xi /* As a special exception, if you include this header file into source 21*53ee8cc1Swenshuai.xi files compiled by GCC, this header file does not by itself cause 22*53ee8cc1Swenshuai.xi the resulting executable to be covered by the GNU General Public 23*53ee8cc1Swenshuai.xi License. This exception does not however invalidate any other 24*53ee8cc1Swenshuai.xi reasons why the executable file might be covered by the GNU General 25*53ee8cc1Swenshuai.xi Public License. */ 26*53ee8cc1Swenshuai.xi 27*53ee8cc1Swenshuai.xi /* 28*53ee8cc1Swenshuai.xi * ISO C Standard: 5.2.4.2.2 Characteristics of floating types <float.h> 29*53ee8cc1Swenshuai.xi */ 30*53ee8cc1Swenshuai.xi 31*53ee8cc1Swenshuai.xi #ifndef _FLOAT_H___ 32*53ee8cc1Swenshuai.xi #define _FLOAT_H___ 33*53ee8cc1Swenshuai.xi 34*53ee8cc1Swenshuai.xi /* Radix of exponent representation, b. */ 35*53ee8cc1Swenshuai.xi #undef FLT_RADIX 36*53ee8cc1Swenshuai.xi #define FLT_RADIX __FLT_RADIX__ 37*53ee8cc1Swenshuai.xi 38*53ee8cc1Swenshuai.xi /* Number of base-FLT_RADIX digits in the significand, p. */ 39*53ee8cc1Swenshuai.xi #undef FLT_MANT_DIG 40*53ee8cc1Swenshuai.xi #undef DBL_MANT_DIG 41*53ee8cc1Swenshuai.xi #undef LDBL_MANT_DIG 42*53ee8cc1Swenshuai.xi #define FLT_MANT_DIG __FLT_MANT_DIG__ 43*53ee8cc1Swenshuai.xi #define DBL_MANT_DIG __DBL_MANT_DIG__ 44*53ee8cc1Swenshuai.xi #define LDBL_MANT_DIG __LDBL_MANT_DIG__ 45*53ee8cc1Swenshuai.xi 46*53ee8cc1Swenshuai.xi /* Number of decimal digits, q, such that any floating-point number with q 47*53ee8cc1Swenshuai.xi decimal digits can be rounded into a floating-point number with p radix b 48*53ee8cc1Swenshuai.xi digits and back again without change to the q decimal digits, 49*53ee8cc1Swenshuai.xi 50*53ee8cc1Swenshuai.xi p * log10(b) if b is a power of 10 51*53ee8cc1Swenshuai.xi floor((p - 1) * log10(b)) otherwise 52*53ee8cc1Swenshuai.xi */ 53*53ee8cc1Swenshuai.xi #undef FLT_DIG 54*53ee8cc1Swenshuai.xi #undef DBL_DIG 55*53ee8cc1Swenshuai.xi #undef LDBL_DIG 56*53ee8cc1Swenshuai.xi #define FLT_DIG __FLT_DIG__ 57*53ee8cc1Swenshuai.xi #define DBL_DIG __DBL_DIG__ 58*53ee8cc1Swenshuai.xi #define LDBL_DIG __LDBL_DIG__ 59*53ee8cc1Swenshuai.xi 60*53ee8cc1Swenshuai.xi /* Minimum int x such that FLT_RADIX**(x-1) is a normalized float, emin */ 61*53ee8cc1Swenshuai.xi #undef FLT_MIN_EXP 62*53ee8cc1Swenshuai.xi #undef DBL_MIN_EXP 63*53ee8cc1Swenshuai.xi #undef LDBL_MIN_EXP 64*53ee8cc1Swenshuai.xi #define FLT_MIN_EXP __FLT_MIN_EXP__ 65*53ee8cc1Swenshuai.xi #define DBL_MIN_EXP __DBL_MIN_EXP__ 66*53ee8cc1Swenshuai.xi #define LDBL_MIN_EXP __LDBL_MIN_EXP__ 67*53ee8cc1Swenshuai.xi 68*53ee8cc1Swenshuai.xi /* Minimum negative integer such that 10 raised to that power is in the 69*53ee8cc1Swenshuai.xi range of normalized floating-point numbers, 70*53ee8cc1Swenshuai.xi 71*53ee8cc1Swenshuai.xi ceil(log10(b) * (emin - 1)) 72*53ee8cc1Swenshuai.xi */ 73*53ee8cc1Swenshuai.xi #undef FLT_MIN_10_EXP 74*53ee8cc1Swenshuai.xi #undef DBL_MIN_10_EXP 75*53ee8cc1Swenshuai.xi #undef LDBL_MIN_10_EXP 76*53ee8cc1Swenshuai.xi #define FLT_MIN_10_EXP __FLT_MIN_10_EXP__ 77*53ee8cc1Swenshuai.xi #define DBL_MIN_10_EXP __DBL_MIN_10_EXP__ 78*53ee8cc1Swenshuai.xi #define LDBL_MIN_10_EXP __LDBL_MIN_10_EXP__ 79*53ee8cc1Swenshuai.xi 80*53ee8cc1Swenshuai.xi /* Maximum int x such that FLT_RADIX**(x-1) is a representable float, emax. */ 81*53ee8cc1Swenshuai.xi #undef FLT_MAX_EXP 82*53ee8cc1Swenshuai.xi #undef DBL_MAX_EXP 83*53ee8cc1Swenshuai.xi #undef LDBL_MAX_EXP 84*53ee8cc1Swenshuai.xi #define FLT_MAX_EXP __FLT_MAX_EXP__ 85*53ee8cc1Swenshuai.xi #define DBL_MAX_EXP __DBL_MAX_EXP__ 86*53ee8cc1Swenshuai.xi #define LDBL_MAX_EXP __LDBL_MAX_EXP__ 87*53ee8cc1Swenshuai.xi 88*53ee8cc1Swenshuai.xi /* Maximum integer such that 10 raised to that power is in the range of 89*53ee8cc1Swenshuai.xi representable finite floating-point numbers, 90*53ee8cc1Swenshuai.xi 91*53ee8cc1Swenshuai.xi floor(log10((1 - b**-p) * b**emax)) 92*53ee8cc1Swenshuai.xi */ 93*53ee8cc1Swenshuai.xi #undef FLT_MAX_10_EXP 94*53ee8cc1Swenshuai.xi #undef DBL_MAX_10_EXP 95*53ee8cc1Swenshuai.xi #undef LDBL_MAX_10_EXP 96*53ee8cc1Swenshuai.xi #define FLT_MAX_10_EXP __FLT_MAX_10_EXP__ 97*53ee8cc1Swenshuai.xi #define DBL_MAX_10_EXP __DBL_MAX_10_EXP__ 98*53ee8cc1Swenshuai.xi #define LDBL_MAX_10_EXP __LDBL_MAX_10_EXP__ 99*53ee8cc1Swenshuai.xi 100*53ee8cc1Swenshuai.xi /* Maximum representable finite floating-point number, 101*53ee8cc1Swenshuai.xi 102*53ee8cc1Swenshuai.xi (1 - b**-p) * b**emax 103*53ee8cc1Swenshuai.xi */ 104*53ee8cc1Swenshuai.xi #undef FLT_MAX 105*53ee8cc1Swenshuai.xi #undef DBL_MAX 106*53ee8cc1Swenshuai.xi #undef LDBL_MAX 107*53ee8cc1Swenshuai.xi #define FLT_MAX __FLT_MAX__ 108*53ee8cc1Swenshuai.xi #define DBL_MAX __DBL_MAX__ 109*53ee8cc1Swenshuai.xi #define LDBL_MAX __LDBL_MAX__ 110*53ee8cc1Swenshuai.xi 111*53ee8cc1Swenshuai.xi /* The difference between 1 and the least value greater than 1 that is 112*53ee8cc1Swenshuai.xi representable in the given floating point type, b**1-p. */ 113*53ee8cc1Swenshuai.xi #undef FLT_EPSILON 114*53ee8cc1Swenshuai.xi #undef DBL_EPSILON 115*53ee8cc1Swenshuai.xi #undef LDBL_EPSILON 116*53ee8cc1Swenshuai.xi #define FLT_EPSILON __FLT_EPSILON__ 117*53ee8cc1Swenshuai.xi #define DBL_EPSILON __DBL_EPSILON__ 118*53ee8cc1Swenshuai.xi #define LDBL_EPSILON __LDBL_EPSILON__ 119*53ee8cc1Swenshuai.xi 120*53ee8cc1Swenshuai.xi /* Minimum normalized positive floating-point number, b**(emin - 1). */ 121*53ee8cc1Swenshuai.xi #undef FLT_MIN 122*53ee8cc1Swenshuai.xi #undef DBL_MIN 123*53ee8cc1Swenshuai.xi #undef LDBL_MIN 124*53ee8cc1Swenshuai.xi #define FLT_MIN __FLT_MIN__ 125*53ee8cc1Swenshuai.xi #define DBL_MIN __DBL_MIN__ 126*53ee8cc1Swenshuai.xi #define LDBL_MIN __LDBL_MIN__ 127*53ee8cc1Swenshuai.xi 128*53ee8cc1Swenshuai.xi /* Addition rounds to 0: zero, 1: nearest, 2: +inf, 3: -inf, -1: unknown. */ 129*53ee8cc1Swenshuai.xi /* ??? This is supposed to change with calls to fesetround in <fenv.h>. */ 130*53ee8cc1Swenshuai.xi #undef FLT_ROUNDS 131*53ee8cc1Swenshuai.xi #define FLT_ROUNDS 1 132*53ee8cc1Swenshuai.xi 133*53ee8cc1Swenshuai.xi #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L 134*53ee8cc1Swenshuai.xi /* The floating-point expression evaluation method. 135*53ee8cc1Swenshuai.xi -1 indeterminate 136*53ee8cc1Swenshuai.xi 0 evaluate all operations and constants just to the range and 137*53ee8cc1Swenshuai.xi precision of the type 138*53ee8cc1Swenshuai.xi 1 evaluate operations and constants of type float and double 139*53ee8cc1Swenshuai.xi to the range and precision of the double type, evaluate 140*53ee8cc1Swenshuai.xi long double operations and constants to the range and 141*53ee8cc1Swenshuai.xi precision of the long double type 142*53ee8cc1Swenshuai.xi 2 evaluate all operations and constants to the range and 143*53ee8cc1Swenshuai.xi precision of the long double type 144*53ee8cc1Swenshuai.xi 145*53ee8cc1Swenshuai.xi ??? This ought to change with the setting of the fp control word; 146*53ee8cc1Swenshuai.xi the value provided by the compiler assumes the widest setting. */ 147*53ee8cc1Swenshuai.xi #undef FLT_EVAL_METHOD 148*53ee8cc1Swenshuai.xi #define FLT_EVAL_METHOD __FLT_EVAL_METHOD__ 149*53ee8cc1Swenshuai.xi 150*53ee8cc1Swenshuai.xi /* Number of decimal digits, n, such that any floating-point number in the 151*53ee8cc1Swenshuai.xi widest supported floating type with pmax radix b digits can be rounded 152*53ee8cc1Swenshuai.xi to a floating-point number with n decimal digits and back again without 153*53ee8cc1Swenshuai.xi change to the value, 154*53ee8cc1Swenshuai.xi 155*53ee8cc1Swenshuai.xi pmax * log10(b) if b is a power of 10 156*53ee8cc1Swenshuai.xi ceil(1 + pmax * log10(b)) otherwise 157*53ee8cc1Swenshuai.xi */ 158*53ee8cc1Swenshuai.xi #undef DECIMAL_DIG 159*53ee8cc1Swenshuai.xi #define DECIMAL_DIG __DECIMAL_DIG__ 160*53ee8cc1Swenshuai.xi 161*53ee8cc1Swenshuai.xi #endif /* C99 */ 162*53ee8cc1Swenshuai.xi #endif /* _FLOAT_H___ */ 163