Bug #69188 [Com]: The constant INF is set to float(0)

From: Date: Thu, 07 Jul 2016 13:19:23 +0000
Subject: Bug #69188 [Com]: The constant INF is set to float(0)
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-202120@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=69188&edit=1 ID: 69188 Comment by: wagner at strato-rz dot de Reported by: manuel at moosnet dot de Summary: The constant INF is set to float(0) Status: Open Type: Bug Package: Math related Operating System: SunOS 5.10 PHP Version: Irrelevant Block user comment: N Private report: N New Comment: Just tested it with Solaris 11, we are seeing the same problem there. What about my proposed fix ? (Not defining HAVE_ATOF_ACCEPTS_INF on Solaris machines) [solaris11 ~]# ./inftest __i386__: Inf atof: 0.000000 fract: Inf [solaris11 ~]# uname -a SunOS solaris11 5.11 11.3 i86pc i386 i86pc Just for clarification, it's not a build breaker, the is_finite() PHP-function seems to be buggy on Solaris. Previous Comments: ------------------------------------------------------------------------ [2015-08-26 13:07:40] wagner at strato-rz dot de Hi, I am a developer at strato. It seems that the problem is with SUN Solaris 5.10. I found that the code in ext/standard/basic_functions.c: php_get_inf() uses atof to determine the value of "INF". To test the matter I wrote a test what "INF" would be if php uses a different way to determine the value ------------------------------------------------ CODE: ------------------------------------------------ int main(void) { #define PHP_DOUBLE_INFINITY_HIGH 0x7ff00000 double val = 0.0; ((uint32_t*)&val)[1] = PHP_DOUBLE_INFINITY_HIGH; ((uint32_t*)&val)[0] = 0; printf("__i386__: %f\n",val); double atf = atof("INF"); printf("atof: %f\n",atf); printf("fract: %f\n",1.0/0.0); return 0; } ------------------------------------------------ OUTPUT: ------------------------------------------------ __i386__: Inf atof: 0.000000 fract: Inf ------------------------------------------------ This shows that using atof() for "INF" does not work as expected and it is not server specific but a problem in the Solaris OS (5.10) itself. Never the less, the other methods php could use would result in a correct value. Defining HAVE_ATOF_ACCEPTS_INF on Solaris 5.10 seems wrong at first, although its a strange behaviour by the OS. Maybe there is something wrong with autotools we are using, that are an older version. I will investigate some more and write down my results here ------------------------------------------------------------------------ [2015-08-25 12:54:39] fisharebest at gmail dot com One of users (also a strato.de customer) has reported the same issue, across a range of PHP versions. I have just built a SunOS 11.2 server and compiled PHP from source. It works as expected. This suggests the problem is specific to servers at strato.de. ------------------------------------------------------------------------ [2015-03-04 21:14:33] manuel at moosnet dot de Description: ------------ First, sorry, this is on a shared hoster (strato.de) environment and I do not have full control over the PHP version that is used; I cannot use anything current, only a variety of older versions. Essentially, the bug is that INF is exactly equal to 0 on SunOS 5.10. NAN seems to work fine. No string conversion is involved as far as I can tell. The CPU seems to be a generic x86 and Python treats INF and NAN correctly, so it seems the FPU is not the culprit. The only mention of this behavior I found elsewhere is this old stackoverflow question: http://stackoverflow.com/questions/11667512/php-inf-has-value-zero Here's the output of a couple of test runs of the test script: >>> uname -a SunOS aklathep 5.10 Generic_142901-13 i86pc i386 i86pc >>> php52 inftest.php X-Powered-By: PHP/5.2.17 Content-type: text/html float(0) float(NAN) >>> php53 inftest.php X-Powered-By: PHP/5.3.29 Content-type: text/html float(0) float(NAN) >>> php55 inftest.php X-Powered-By: PHP/5.5.18 Content-type: text/html float(0) float(NAN) >>> php56 inftest.php X-Powered-By: PHP/5.6.2 Content-type: text/html; charset=iso-8859-1 float(0) float(NAN) Full version information: >>> php52 --version PHP 5.2.17 (cgi-fcgi) (built: Jul 30 2014 15:57:46) Copyright (c) 1997-2010 The PHP Group Zend Engine v2.2.0, Copyright (c) 1998-2010 Zend Technologies >>> php53 --version PHP 5.3.29 (cgi-fcgi) (built: Aug 20 2014 15:52:05) Copyright (c) 1997-2014 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2014 Zend Technologies >>> php55 --version PHP 5.5.18 (cgi-fcgi) (built: Oct 17 2014 12:36:29) Copyright (c) 1997-2014 The PHP Group Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies >>> php56 --version PHP 5.6.2 (cgi-fcgi) (built: Oct 16 2014 13:30:19) Copyright (c) 1997-2014 The PHP Group Zend Engine v2.6.0, Copyright (c) 1998-2014 Zend Technologies Test script: --------------- <?php $v = INF; var_dump($v); $v = NAN; var_dump($v); Expected result: ---------------- float(INF) float(NAN) Actual result: -------------- float(0) float(NAN) ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=69188&edit=1

« previous php.bugs (#202120) next »