php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login go to bug id or search bugs for
Bug #32082 Submitted: Comparing of floating point values fail 2005-02-23 16:22 UTC 2005-02-23 16:25 UTC weber at mapsolute dot com Not a bug Math related 4.3.9 Linux No None
Welcome! If you don't have a Git account, you can't do anything here.
You can add a comment by following this link or if you reported this bug, you can edit this bug over here.

[2005-02-23 16:22 UTC] 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)

```

## History

[2005-02-23 16:25 UTC] weber at mapsolute dot com
```Ups, my misstake, I saw it after submitting (hopefully nobody reads it ;-)).
```
[2013-07-24 16:21 UTC] jbertron at spotxchange dot com
```How is this not a bug ?
At the very least it deserves an explanation.
```