[Numpy-svn] r6396 - in branches/coremath/numpy/core: include/numpy src

numpy-svn at scipy.org numpy-svn at scipy.org
Wed Feb 18 12:31:44 EST 2009


Author: cdavid
Date: 2009-02-18 11:31:27 -0600 (Wed, 18 Feb 2009)
New Revision: 6396

Modified:
   branches/coremath/numpy/core/include/numpy/npy_math.h
   branches/coremath/numpy/core/src/_signbit.c
   branches/coremath/numpy/core/src/npy_math.c.src
Log:
Fix nan/inf/co macro when not available on the target platform in npy_math.

Modified: branches/coremath/numpy/core/include/numpy/npy_math.h
===================================================================
--- branches/coremath/numpy/core/include/numpy/npy_math.h	2009-02-18 17:30:41 UTC (rev 6395)
+++ branches/coremath/numpy/core/include/numpy/npy_math.h	2009-02-18 17:31:27 UTC (rev 6396)
@@ -21,25 +21,28 @@
  * IEEE 754 fpu handling. Those are guaranteed to be macros
  */
 #ifndef NPY_HAVE_DECL_ISNAN
-        #define npy_isnan(x) _npy_isnan((x))
+        #define npy_isnan(x) ((x) != (x))
 #else
         #define npy_isnan(x) isnan((x))
 #endif
 
 #ifndef NPY_HAVE_DECL_ISFINITE
-        #define npy_isfinite(x) _npy_isfinite((x))
+        #define npy_isfinite(x) !npy_isnan((x) + (-x))
 #else
         #define npy_isfinite(x) isfinite((x))
 #endif
 
 #ifndef NPY_HAVE_DECL_ISFINITE
-        #define npy_isinf(x) _npy_isinf((x))
+        #define npy_isinf(x) (!npy_isfinite(x) && !npy_isnan(x))
 #else
         #define npy_isinf(x) isinf((x))
 #endif
 
 #ifndef NPY_HAVE_DECL_SIGNBIT
-        #define npy_signbit(x) _npy_signbit((x))
+        #define npy_signbit(x) \
+              (sizeof (x) == sizeof (long double) ? _npy_signbit_ld (x) \
+               : sizeof (x) == sizeof (double) ? _npy_signbit_d (x) \
+               : _npy_signbit_f (x))
 #else
         #define npy_signbit(x) signbit((x))
 #endif

Modified: branches/coremath/numpy/core/src/_signbit.c
===================================================================
--- branches/coremath/numpy/core/src/_signbit.c	2009-02-18 17:30:41 UTC (rev 6395)
+++ branches/coremath/numpy/core/src/_signbit.c	2009-02-18 17:31:27 UTC (rev 6396)
@@ -1,7 +1,7 @@
 /* Adapted from cephes */
 
 static int
-signbit_d(double x)
+_npy_signbit_d(double x)
 {
     union
     {

Modified: branches/coremath/numpy/core/src/npy_math.c.src
===================================================================
--- branches/coremath/numpy/core/src/npy_math.c.src	2009-02-18 17:30:41 UTC (rev 6395)
+++ branches/coremath/numpy/core/src/npy_math.c.src	2009-02-18 17:31:27 UTC (rev 6396)
@@ -195,35 +195,17 @@
  **                     IEEE 754 FPU HANDLING                               **
  *****************************************************************************
  */
-#if !defined(HAVE_DECL_ISNAN)
-    # define isnan(x) ((x) != (x))
-#endif
-
-/* VS 2003 with /Ox optimizes (x)-(x) to 0, which is not IEEE compliant. So we
- * force (x) + (-x), which seems to work. */
-#if !defined(HAVE_DECL_ISFINITE)
-    # define isfinite(x) !isnan((x) + (-x))
-#endif
-
-#if !defined(HAVE_DECL_ISINF)
-#define isinf(x) (!isfinite(x) && !isnan(x))
-#endif
-
 #if !defined(HAVE_DECL_SIGNBIT)
-    #include "_signbit.c"
-    # define signbit(x) \
-              (sizeof (x) == sizeof (long double) ? signbit_ld (x) \
-               : sizeof (x) == sizeof (double) ? signbit_d (x) \
-               : signbit_f (x))
+#include "_signbit.c"
 
-static int signbit_f (float x)
+static int _npy_signbit_f (float x)
 {
-    return signbit_d((double)x);
+    return npy_signbit_d((double)x);
 }
 
-static int signbit_ld (long double x)
+static int _npy_signbit_ld (long double x)
 {
-    return signbit_d((double)x);
+    return _npy_signbit_d((double)x);
 }
 #endif
 




More information about the Numpy-svn mailing list