#32082 [Opn->Bgs]: Comparing of floating point values fail
ID: 32082
User updated by: weber at mapsolute dot com
Reported By: weber at mapsolute dot com
-Status: Open
+Status: Bogus
Bug Type: Math related
Operating System: Linux
PHP Version: 4.3.9
New Comment:
Ups, my misstake, I saw it after submitting (hopefully nobody reads it
;-)).
Previous Comments:
------------------------------------------------------------------------
[2005-02-23 16:22:17] weber at mapsolute dot com
Description:
------------
If you compare two equal floating point values for uneven the compare
fails (it returns true) and I can see no reason why. I've checked the
PHP manual (http://uk.php.net/manual/en/language.types.float.php), but
this doesn't explain the behave.
The two numbers below must be binary equal, independend if you save
them as single or double precision floating point numbers and even if
you would store them as double and convert into float for comparing,
they must stay binary equal. Even as string they must be binary equal.
Therefore comparing them should return true in any case.
Quote from http://en.wikipedia.org/wiki/IEEE_754:
Comparing floating-point numbers
An interesting feature of this particular representation is that it
makes comparisons of numbers of the same sign which are not NaNs
simple. For positive numbers (the sign bit is 0) a and b, then a < b
whenever the unsigned binary integers with the same bit patterns as a
and b are also ordered the same way. In other words if you are
comparing two positive floating-point numbers (known not to be NaNs)
you can just use an unsigned binary integer comparison using the same
bits.
Reproduce code:
---------------
<html><body><?php
$a = 437.674240047;
$b = 437.674240047;
if( $a != $b ) echo "<p>OK</p>";
else echo "<p>WRONG</p>";
var_dump($a); echo "<br>"; var_dump($b);
?></body></html>
Expected result:
----------------
OK
float(437.674240047)
float(437.674240047)
Actual result:
--------------
WRONG
float(437.674240047)
float(437.674240047)
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=32082&edit=1
Thread (3 messages)