ID: 44659 Updated by: [EMAIL PROTECTED] Reported By: spartacus4+php at gmail dot com -Status: Open +Status: Bogus Bug Type: Math related Operating System: Mac OSX PHP Version: 5.2.5 New Comment:
Floating point values have a limited precision. Hence a value might not have the same string representation after any processing. That also includes writing a floating point value in your script and directly printing it without any mathematical operations. If you would like to know more about "floats" and what IEEE 754 is, read this: http://docs.sun.com/source/806-3568/ncg_goldberg.html Thank you for your interest in PHP. Previous Comments: ------------------------------------------------------------------------ [2008-04-07 13:13:41] spartacus4+php at gmail dot com Sorry, I through together that sample code really quick. Here's a simplified sample code snippet that produces the same results: $amount = 49.83; $out=array(); for($i=0; $i<1000; $i++){ if(!isset($out['test'])) $out['test']=0; $out['test'] += $amount; echo $out['test'].' + '.$amount.'<br>'; } echo '<pre>'; print_r($out); echo '</pre>'; // Messes up at value: 31243.41 ------------------------------------------------------------------------ [2008-04-07 13:04:12] spartacus4+php at gmail dot com Description: ------------ It appears PHP is adding incorrect decimal points. The included test script shows this happening at value: 31243.41. When I add the two values: 31243.41 + 49.83 it produces the correct sum. But if I use it in an array that += the amount, it adds an incorrect decimal value after several hundred add ons. It appears to be a possible memory flaw when summing array values. FYI: I'm actually using PHP version 5.2.3 - it was not an option in the drop down. Reproduce code: --------------- $amount = '49.83'; $out=array(); $type='test';; for($i=0; $i<1000; $i++){ if(!isset($out[$test][$result])) $out[$test][$result]=0; $out[$test][$result] += $amount; echo $out[$test][$result].' + '.$amount.'<br>'; } echo '<pre>'; print_r($out); echo '</pre>'; Expected result: ---------------- Either an explanation of why the decimal points are added only when using an array value OR potentially a bug fix within new version fixing this flaw. Actual result: -------------- Actual results are output within included code. ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=44659&edit=1