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:
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
Previous Comments:
------------------------------------------------------------------------
[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