Edit report at http://bugs.php.net/bug.php?id=51396&edit=1
ID: 51396
Comment by: codeslinger at compsalot dot com
Reported by: codeslinger at compsalot dot com
Summary: Math is Unreliable
Status: Feedback
Type: Bug
Package: Math related
Operating System: any
PHP Version: Irrelevant
Assigned To: aharvey
New Comment:
String conversion errors
There is a flag called $FloatType
You can use it to select the type of conversion that is done.
//this fails with string conversion error
case 0: $s = (string)$f;
//this fails with string conversion error
case 12: $s = is_float($f) ? sprintf('%.12F', $f) : (string)$f;
//this fails with string conversion error
case 14: $s = is_float($f) ? sprintf('%.14F', $f) : (string)$f;
//this WORKS, does not cause a string conversion error
case 20: $s = is_float($f) ? sprintf('%.20F', $f) : (string)$f;
When I say conversion error, I mean that the result is "0.0:" not that
php gives any kind of error message.
Previous Comments:
------------------------------------------------------------------------
[2010-03-26 10:23:27] codeslinger at compsalot dot com
quote: Btw, it could be due to bad initialized data as well
I don't understand the question/statement.
The program generates all of it's data.
If you look near the bottom of pov.pco.php you will see the following
line:
echo "FATAL ERROR: PHP Math is Corrupt Again!!! idx = $idx\n";
If you set a breakpoint there in a php debugger and examine the vaules
you will see that that array contains a float of 0.1
and that the string it was converted to is "0.0:"
------------------------------------------------------------------------
[2010-03-26 10:17:47] codeslinger at compsalot dot com
Thank You for the response.
This program executes thousands of identical loops
it performs a number format conversion on each of those thousands of
numbers in it's array.
Out of all of those thousands of identical conversions about 4 of them
will produce an invalid result.
for this specific program, if I skip the array_merge (see $Nest) then
the bug does not occur.
Every time I make a change to the loops etc. the behavior changes, even
to where the bug is not triggered. I have already simplified this
program quite a bit and the result was that it now fails at a totally
different array index then when I first observed the problem. The
trigger is very finicky.
XP is not a factor here, even though the original problem was found on
XP, I am running this Snowflake program on Ubuntu Linux.
converting a number to a string should never result in that string
containing a non-numeric character.
I can try to reduce this program further, but really and truly, it is
hard to trigger this -- but once triggered it is totally consistent and
repeatable.
------------------------------------------------------------------------
[2010-03-26 10:11:25] [email protected]
Btw, it could be due to bad initialized data as well (as you experience
it on unix as well).
Can you try to run your script under valgrind too?
------------------------------------------------------------------------
[2010-03-26 09:54:33] [email protected]
It looks to me in a bug at the number formatting in the Windows API (not
php dependent). Other users met this problem on old XP systems. You
could reproduce it using number_format only. Or maybe only with a single
printf function.
Can you try using another windows box or using 5.3.2-vc9 builds?
Btw, it is not about bad or good attitude but about having something we
can actually use to help you. I can understand your worries after having
spent hours to debug this problem, but we will still use a small script
to debug this problem, if any.
------------------------------------------------------------------------
[2010-03-26 09:40:23] codeslinger at compsalot dot com
did you even LOOOKK at the script that I provided?
it is not that complicated. a few loops and some array allocations.
previous attempts to reduce this to anything simpler have been
unsuccessful.
this is exactly the attitude that causes me to be overwrought.
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/bug.php?id=51396
--
Edit this bug report at http://bugs.php.net/bug.php?id=51396&edit=1