Bug #51396 [Com]: Math is Unreliable

[email protected] ("codeslinger at compsalot dot com") Fri, 26 Mar 2010 21:02:47 +0100 (CET)
Newsgroups php.bugs
Message-ID <[email protected]>
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

 New Comment:

The billing program was failing on multiple computers at multiple
locations, it failed on XP and Windows 2000 with various cpus. Those
were customer sites!  I reproduced the problem on a vmware setup with
windows 2000.

This snowflake program is failing on Ubuntu Hardy 8.0.4 with all of the
updates.  This is the stock php that comes with Ubuntu. This is a
Pentium M 32bit Laptop.  I've never experienced a memory error on this
computer and the fact of it's consistency would argue against this being
some kind of hardware issue.

Here is what I get when I run the simplefail in the default config.

php -v
PHP 5.2.4-2ubuntu5.10 with Suhosin-Patch 0.9.6.2 (cli) (built: Jan  6
2010 22:01:14) 
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies
    with Xdebug v2.0.3, Copyright (c) 2002-2007, by Derick Rethans
    with Zend Debugger v5.2.15, Copyright (c) 1999-2008, by Zend
Technologies

==========

php simplefail.php

Selected onepair.txt, Found 1 items

(string)(double) -0.1 === -0.1  which of course is correct
But when we convert the value in an array it fails

Conversion Error: PHP Math  idx = 0 || '-0.1'  !== '-0.0:'


=====

THANK YOU  I REALLY APPRECIATE THE HELP


Previous Comments:
------------------------------------------------------------------------
[2010-03-26 17:25:40] [email protected]

Well, it is the next character after '9', and the character string is
built up in zend_dtoa() by adding a value L (presumably intended to be
in the range 0..9) to '0'. If L somehow ends up being 10, you'd get a
colon.

With the values that are apparently causing problems (the problematic
value in onepair.txt is 0.09999999999999999167...), it does kind of look
like a rounding issue to me, although I've no idea why it's not being
triggered by more than two or three users in that case.

------------------------------------------------------------------------
[2010-03-26 17:18:22] [email protected]

Bad memory perhaps?  But why consistently a ':' ?

------------------------------------------------------------------------
[2010-03-26 16:57:15] [email protected]

JFTR, I was also unable to reproduce the failure case from any of the
data files on both 32-bit and 64-bit Linux builds and a 32-bit Windows
build. I've got a couple of boxen crunching away generating random
doubles and converting them to strings in what seems to be the sort of
range that causes problems (one 32-bit Linux, one 64-bit Linux): nothing
yet after a couple of billion iterations.

In short, I don't have a clue what it could be either, but I'll keep the
random double generation going a while longer just in case it hits
paydirt.

------------------------------------------------------------------------
[2010-03-26 16:39:33] [email protected]

Rasmus, he is not the only person. There are two other reports about it.
However he is the first one to experience it on non windows platform.

------------------------------------------------------------------------
[2010-03-26 16:26:05] [email protected]

I ran your simplefail.php on all 4 data files.  Never saw the failure
case.  
Then I took just the huge rawpairs.txt file (had to increase the
memory_limit) 
and modified your program slightly to do:

for($i=0;$i<100000;$i++) ConvertData($data);

and ran that, which took quite a while.  Still no failures.

You are still the only person who has ever reported these weird ":"
characters 
showing up, and you have yet to produce any sort of code that reproduces
it for 
someone else.  We'll keep trying, but something that happens for 1
person out of 
millions is suspicious.

------------------------------------------------------------------------


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