Bug #12505 Updated: array_sum function total calculate error
| From: | jeroen@php.net | Date: | Fri, 03 Aug 2001 19:15:47 +0000 |
| Subject: | Bug #12505 Updated: array_sum function total calculate error | ||
| References: | 1 | Groups: | php.dev |
| Request: | Send a blank email to php-dev+get-62007@lists.php.net to get a copy of this message | ||
ID: 12505
Updated by: jeroen
Reported By: omeroz@kamilkoc.com.tr
Old Status: Assigned
Status: Closed
Bug Type: Arrays related
Operating System: Red Hat Linux 6.1
PHP Version: latest CVS (08/01/01)
Assigned To: jeroen
New Comment:
Fixed in CVS, will be in 4.0.7
Previous Comments:
------------------------------------------------------------------------
[2001-08-01 16:55:46] jeroen@php.net
Hm, same problem as the other overflow-things. Assigned to myself.
Are there other dangerous functions like this anywhere?
------------------------------------------------------------------------
[2001-08-01 08:36:20] andy@php.net
status -> analyzed
------------------------------------------------------------------------
[2001-08-01 05:56:08] jmcastagnetto@php.net
The problem is with the typecasting to LONG, if you use the code:
<?php
$tt=array(382478633.0,367687181.0,452504275.0,471367521.0,848270658.0,1181944543.0);
echo array_sum($tt)."\n";
?>
The result is the correct one (3704252811)
Solution would be to
1) use floating point representation for bign numbers in PHP code (add caveat to the manual
perhaps?)
or
2) check that the array_sum result is nor overflowing LONG in the C code implementation and bump the
type to DOUBLE if it does.
second option would be better IMHO
------------------------------------------------------------------------
[2001-08-01 04:02:52] omeroz@kamilkoc.com.tr
$tt=array(382478633,367687181,452504275,471367521,848270658,1181944543);
$total_tt=array_sum($tt);
echo "Total_tt=".$total_tt;
// Prints Total_tt=-590714485
Must be 3704252811.
------------------------------------------------------------------------
Edit this bug report at http://bugs.php.net/?id=12505&edit=1