helly           Mon Mar 29 14:03:59 2004 EDT

  Modified files:              (Branch: PHP_4_3)
    /php-src/ext/standard       config.m4 basic_functions.c 
    /php-src/main       config.w32.h 
  Log:
  MFH: Found a NAN/INF solution that should be portable everywhere(?)
  
  
http://cvs.php.net/diff.php/php-src/ext/standard/config.m4?r1=1.47.2.7&r2=1.47.2.8&ty=u
Index: php-src/ext/standard/config.m4
diff -u php-src/ext/standard/config.m4:1.47.2.7 php-src/ext/standard/config.m4:1.47.2.8
--- php-src/ext/standard/config.m4:1.47.2.7     Fri Mar 26 20:41:46 2004
+++ php-src/ext/standard/config.m4      Mon Mar 29 14:03:59 2004
@@ -1,4 +1,4 @@
-dnl $Id: config.m4,v 1.47.2.7 2004/03/27 01:41:46 helly Exp $ -*- sh -*-
+dnl $Id: config.m4,v 1.47.2.8 2004/03/29 19:03:59 helly Exp $ -*- sh -*-
 
 divert(3)dnl
 
@@ -328,6 +328,49 @@
   AC_DEFINE([HAVE_ATOF_ACCEPTS_INF], 1, [whether atof() accepts INF])
 fi
 
+AC_CACHE_CHECK(whether HUGE_VAL + -HUGEVAL = NAN, ac_cv_huge_val_nan,[
+  AC_TRY_RUN([
+#include <math.h>
+#include <stdlib.h>
+
+#ifdef HAVE_ISINF
+#define zend_isinf(a) isinf(a)
+#elif defined(INFINITY)
+/* Might not work, but is required by ISO C99 */
+#define zend_isinf(a) (((a)==INFINITY)?1:0)
+#elif defined(HAVE_FPCLASS)
+#define zend_isinf(a) ((fpclass(a) == FP_PINF) || (fpclass(a) == FP_NINF))
+#else
+#define zend_isinf(a) 0
+#endif
+
+#ifdef HAVE_ISNAN
+#define zend_isnan(a) isnan(a)
+#elif defined(NAN)
+#define zend_isnan(a) (((a)==NAN)?1:0)
+#elif defined(HAVE_FPCLASS)
+#define zend_isnan(a) ((fpclass(a) == FP_SNAN) || (fpclass(a) == FP_QNAN))
+#else
+#define zend_isnan(a) 0
+#endif
+
+int main(int argc, char** argv)
+{
+       return zend_isinf(HUGE_VAL) && zend_isnan(HUGE_VAL + -HUGE_VAL) ? 0 : 1;
+}
+  ],[
+      ac_cv_huge_val_nan=yes
+  ],[
+      ac_cv_huge_val_nan=no
+  ],[
+      ac_cv_huge_val_nan=yes
+  ])
+])
+dnl This is the most probable fallback so we assume yes in case of cross compile.
+if test "$ac_cv_huge_val_nan" = "yes"; then
+  AC_DEFINE([HAVE_HUGE_VAL_NAN], 1, [whether HUGE_VAL + -HUGEVAL = NAN])
+fi
+
 PHP_NEW_EXTENSION(standard, array.c base64.c basic_functions.c browscap.c crc32.c 
crypt.c \
                             cyr_convert.c datetime.c dir.c dl.c dns.c exec.c file.c 
filestat.c \
                             flock_compat.c formatted_print.c fsock.c head.c html.c 
image.c \
http://cvs.php.net/diff.php/php-src/ext/standard/basic_functions.c?r1=1.543.2.34&r2=1.543.2.35&ty=u
Index: php-src/ext/standard/basic_functions.c
diff -u php-src/ext/standard/basic_functions.c:1.543.2.34 
php-src/ext/standard/basic_functions.c:1.543.2.35
--- php-src/ext/standard/basic_functions.c:1.543.2.34   Sun Mar 28 16:50:01 2004
+++ php-src/ext/standard/basic_functions.c      Mon Mar 29 14:03:59 2004
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: basic_functions.c,v 1.543.2.34 2004/03/28 21:50:01 helly Exp $ */
+/* $Id: basic_functions.c,v 1.543.2.35 2004/03/29 19:03:59 helly Exp $ */
 
 #include "php.h"
 #include "php_streams.h"
@@ -1001,12 +1001,14 @@
 
 PHPAPI double php_get_nan()
 {
-#if defined(__i386__) || defined(_X86_) || defined(ALPHA) || defined(_ALPHA) || 
defined(__alpha)
+#if HAVE_HUGE_VAL_NAN
+       return HUGE_VAL + -HUGE_VAL;
+#elif defined(__i386__) || defined(_X86_) || defined(ALPHA) || defined(_ALPHA) || 
defined(__alpha)
        double val;
        ((php_uint32*)&val)[1] = PHP_DOUBLE_QUIET_NAN_HIGH;
        ((php_uint32*)&val)[0] = 0;
        return val;
-#elif defined(HAVE_ATOF_ACCEPTS_NAN)
+#elif HAVE_ATOF_ACCEPTS_NAN
        return atof("NAN");
 #else
        return 0.0/0.0;
@@ -1015,12 +1017,14 @@
 
 PHPAPI double php_get_inf()
 {
-#if defined(__i386__) || defined(_X86_) || defined(ALPHA) || defined(_ALPHA) || 
defined(__alpha)
+#if HAVE_HUGE_VAL_NAN
+       return HUGE_VAL;
+#elif defined(__i386__) || defined(_X86_) || defined(ALPHA) || defined(_ALPHA) || 
defined(__alpha)
        double val;
        ((php_uint32*)&val)[1] = PHP_DOUBLE_INFINITY_HIGH;
        ((php_uint32*)&val)[0] = 0;
        return val;
-#elif defined(HAVE_ATOF_ACCEPTS_INF)
+#elif HAVE_ATOF_ACCEPTS_INF
        return atof("INF");
 #else
        return 1.0/0.0;
http://cvs.php.net/diff.php/php-src/main/config.w32.h?r1=1.61.2.5&r2=1.61.2.6&ty=u
Index: php-src/main/config.w32.h
diff -u php-src/main/config.w32.h:1.61.2.5 php-src/main/config.w32.h:1.61.2.6
--- php-src/main/config.w32.h:1.61.2.5  Fri Mar 26 20:53:18 2004
+++ php-src/main/config.w32.h   Mon Mar 29 14:03:59 2004
@@ -2,7 +2,7 @@
        Build Configuration for Win32.
        This has only been tested with MS VisualC++ 6 (and later).
 
-       $Id: config.w32.h,v 1.61.2.5 2004/03/27 01:53:18 helly Exp $
+       $Id: config.w32.h,v 1.61.2.6 2004/03/29 19:03:59 helly Exp $
 */
 
 /* Default PHP / PEAR directories */
@@ -177,3 +177,4 @@
 
 #undef HAVE_ATOF_ACCEPTS_NAN
 #undef HAVE_ATOF_ACCEPTS_INF
+#define HAVE_HUGE_VAL_NAN 1

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to