1 /* `HUGE_VALL' constant for IEEE 754 machines (where it is infinity). 2 Used by <stdlib.h> and <math.h> functions for overflow. 3 Copyright (C) 1992, 1995, 1996, 1997, 1999, 2000, 2004 4 Free Software Foundation, Inc. 5 6 The GNU C Library is free software; you can redistribute it and/or 7 modify it under the terms of the GNU Lesser General Public 8 License as published by the Free Software Foundation; either 9 version 2.1 of the License, or (at your option) any later version. 10 11 The GNU C Library is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 Lesser General Public License for more details. 15 16 You should have received a copy of the GNU Lesser General Public 17 License along with the GNU C Library; if not, see 18 <http://www.gnu.org/licenses/>. */ 19 20 #ifndef _MATH_H 21 # error "Never use <bits/huge_vall.h> directly; include <math.h> instead." 22 #endif 23 24 #if __GNUC_PREREQ(3,3) 25 # define HUGE_VALL (__builtin_huge_vall()) 26 #else 27 # include <bits/wordsize.h> 28 # if __WORDSIZE == 32 29 # define HUGE_VALL ((long double) HUGE_VAL) 30 # elif __GNUC_PREREQ(2,96) 31 # define HUGE_VALL (__extension__ 0x1.0p32767L) 32 # elif defined __GNUC__ 33 34 # define HUGE_VALL \ 35 (__extension__ \ 36 ((union { struct { unsigned long __h, __l; } __i; long double __d; }) \ 37 { __i: { __h: 0x7fff000000000000UL, __l: 0 } }).__d) 38 39 # else /* not GCC */ 40 41 typedef union { unsigned char __c[16]; long double __d; } __huge_vall_t; 42 # define __HUGE_VALL_bytes { 0x7f, 0xff, 0,0,0,0,0,0,0,0,0,0,0,0,0,0 } 43 static __huge_vall_t __huge_vall = { __HUGE_VALL_bytes }; 44 # define HUGE_VALL (__huge_vall.__d) 45 46 # endif /* GCC. */ 47 #endif /* GCC 3.3. */ 48