Back to index

glibc  2.9
mathdef.h
Go to the documentation of this file.
00001 /* Copyright (C) 1997,1998,1999,2000,2003,2004,2006
00002        Free Software Foundation, Inc.
00003    This file is part of the GNU C Library.
00004 
00005    The GNU C Library is free software; you can redistribute it and/or
00006    modify it under the terms of the GNU Lesser General Public
00007    License as published by the Free Software Foundation; either
00008    version 2.1 of the License, or (at your option) any later version.
00009 
00010    The GNU C Library is distributed in the hope that it will be useful,
00011    but WITHOUT ANY WARRANTY; without even the implied warranty of
00012    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013    Lesser General Public License for more details.
00014 
00015    You should have received a copy of the GNU Lesser General Public
00016    License along with the GNU C Library; if not, write to the Free
00017    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
00018    02111-1307 USA.  */
00019 
00020 #if !defined _MATH_H && !defined _COMPLEX_H
00021 # error "Never use <bits/mathdef.h> directly; include <math.h> instead"
00022 #endif
00023 
00024 /* FIXME! This file describes properties of the compiler, not the machine;
00025    it should not be part of libc!  */
00026 
00027 #if defined __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
00028 # define _MATH_H_MATHDEF    1
00029 
00030 # ifdef __GNUC__
00031 #  if __STDC__ == 1
00032 
00033 /* In GNU or ANSI mode, gcc leaves `float' expressions as-is.  */
00034 typedef float float_t;
00035 typedef double double_t;
00036 
00037 #  else
00038 
00039 /* For `gcc -traditional', `float' expressions are evaluated as `double'. */
00040 typedef double float_t;
00041 typedef double double_t;
00042 
00043 #  endif
00044 # else
00045 
00046 /* Wild guess at types for float_t and double_t. */
00047 typedef double float_t;
00048 typedef double double_t;
00049 
00050 # endif
00051 
00052 /* The values returned by `ilogb' for 0 and NaN respectively.  */
00053 # define FP_ILOGB0     (-2147483647)
00054 # define FP_ILOGBNAN   (2147483647)
00055 
00056 #endif /* ISO C99 && MATH_H */
00057 
00058 #if defined _COMPLEX_H && !defined _COMPLEX_H_MATHDEF
00059 # define _COMPLEX_H_MATHDEF 1
00060 # if defined(__GNUC__) && !__GNUC_PREREQ(3,4)
00061 
00062 /* Due to an ABI change, we need to remap the complex float symbols.  */
00063 #  define _Mdouble_         float
00064 #  define __MATHCALL(function, args) \
00065     __MATHDECL (_Complex float, function, args)
00066 #  define __MATHDECL(type, function, args) \
00067     __MATHDECL_1(type, function##f, args, __c1_##function##f); \
00068     __MATHDECL_1(type, __##function##f, args, __c1_##function##f)
00069 #  define __MATHDECL_1(type, function, args, alias) \
00070     extern type function args __asm__(#alias) __THROW
00071 
00072 #  include <bits/cmathcalls.h>
00073 
00074 #  undef _Mdouble_
00075 #  undef __MATHCALL
00076 #  undef __MATHDECL
00077 #  undef __MATHDECL_1
00078 
00079 # endif /* GNUC before 3.4 */
00080 #endif /* COMPLEX_H */