|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2015-03-04 21:14 UTC] 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) PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sat Oct 25 09:00:02 2025 UTC |
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