ID:               45978
 Updated by:       [EMAIL PROTECTED]
 Reported By:      firealwaysworks at gmail dot com
 Status:           Bogus
 Bug Type:         Math related
 Operating System: Linux
 PHP Version:      5.2.6
 New Comment:

It's the CPU which is "broken", read the link provided.


Previous Comments:
------------------------------------------------------------------------

[2008-09-03 05:50:33] firealwaysworks at gmail dot com

Cool,  but this is still an inconsistency.  Any string value of the
number is treated is differently then when passed to round().   This is
still a very serious problem for us because we are storing all of this
information in a SQL database,  the number will be lost when we build
the query. 

I think you'll tell me that you don't care if people loose money when
they use your platform and that you'll tell me to use someone Else's
code,  like BC Math.   I think that relying on 3rd party extensions to
fix your mistakes is unprofessional.

Peace

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

[2008-09-03 05:16:45] [EMAIL PROTECTED]

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.

The result of 21.33*1.015 is stored as slightly less than 21.64995
(21.649949999999997 on my Windows system), different than when you write
the literal static value. The result of 21.33*1.015 when printing it
(happens differently than round() function, so results may vary) or
rounding 5-14 decimal places, those extra internal 9s are "rolled over."

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

[2008-09-03 02:09:39] firealwaysworks at gmail dot com

Description:
------------
In this example the multiplication of two floats yields a number with 5
significant figures.  The round() function incorrectly handles this
number only when it is working with the answer to a mathematical
operation.  It is important to note that the round() function is working
properly for static values. 

I found this because I am writing financial software in PHP.   I have
absolutely no doubt that this bug would cause our company to loose
money.

Reproduce code:
---------------
print 21.33*1.015."<br>";
print round(21.33*1.015,2)."<br>";
print round(21.33*1.015,4)."<br>";
print round(21.64995,4);

Expected result:
----------------
21.64995
21.65
21.65
21.65

Actual result:
--------------
21.64995
21.65
21.6499
21.65


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


-- 
Edit this bug report at http://bugs.php.net/?id=45978&edit=1

Reply via email to