Main Page | Class List | Directories | File List | Class Members | File Members

pike_float.h

Go to the documentation of this file.
00001 /* Misc stuff for dealing with floats.
00002  *
00003  * $Id: pike_float.h,v 1.8 2005/07/15 18:16:52 grubba Exp $
00004  */
00005 
00006 #ifndef PIKE_FLOAT_H
00007 #define PIKE_FLOAT_H
00008 
00009 #include "global.h"
00010 
00011 #ifdef HAVE_FLOATINGPOINT_H
00012 #include <floatingpoint.h>
00013 #endif
00014 #ifdef HAVE_IEEEFP_H
00015 #include <ieeefp.h>
00016 #endif
00017 #ifdef HAVE_FP_CLASS_H
00018 #include <fp_class.h>
00019 #endif
00020 
00021 /* isnan()...
00022  */
00023 #ifdef HAVE_ISNAN
00024 #if defined(HAVE__ISNAN) && defined(__NT__)
00025 /* On NT only _isnan() has a prototype.
00026  * isnan() is the standardized name, so use that
00027  * on all other platforms.
00028  */
00029 #define PIKE_ISNAN(X)   _isnan(X)
00030 #else /* !(HAVE__ISNAN && __NT__) */
00031 #define PIKE_ISNAN(X)   isnan(X)
00032 #endif /* HAVE__ISNAN && __NT__ */
00033 #else /* !HAVE_ISNAN */
00034 #ifdef HAVE__ISNAN
00035 #define PIKE_ISNAN(X)   _isnan(X)
00036 #else /* !HAVE__ISNAN */
00037 /* Fallback function */
00038 static INLINE int pike_isnan(double x)
00039 {
00040   return ((x == 0.0) == (x < 0.0)) &&
00041     ((x == 0.0) == (x > 0.0));
00042 }
00043 #define PIKE_ISNAN(X)   pike_isnan(X)
00044 #endif /* HAVE__ISNAN */
00045 #endif /* HAVE_ISNAN */
00046 
00047 /* isinf()...
00048  */
00049 #ifdef HAVE_ISINF
00050 #define PIKE_ISINF(X)   isinf(X)
00051 #else /* HAVE_ISINF */
00052 #define PIKE_ISINF(X)   ((X) && ((X)+(X) == (X)))
00053 #endif /* HAVE_ISINF */
00054 
00055 #ifdef HAVE_ISUNORDERED
00056 #define PIKE_ISUNORDERED(X,Y) isunordered(X,Y)
00057 #else
00058 #define PIKE_ISUNORDERED(X,Y) (PIKE_ISNAN(X)||PIKE_ISNAN(Y))
00059 #endif /* HAVE_ISUNORDERED */
00060 
00061 #ifndef FLOAT_IS_IEEE_BIG
00062 #ifndef FLOAT_IS_IEEE_LITTLE
00063 #define NEED_CUSTOM_IEEE
00064 #endif
00065 #endif
00066 #ifndef NEED_CUSTOM_IEEE
00067 #ifndef DOUBLE_IS_IEEE_BIG
00068 #ifndef DOUBLE_IS_IEEE_LITTLE
00069 #define NEED_CUSTOM_IEEE
00070 #endif
00071 #endif
00072 #endif
00073 
00074 #endif  /* !PIKE_FLOAT_H */

Generated on Fri Jul 22 23:44:26 2005 for Pike by  doxygen 1.3.9.1