Bug #74925 [Opn->Nab]: Mismatching floating values
| From: | krakjoe@php.net | Date: | Fri, 14 Jul 2017 14:49:40 +0000 |
| Subject: | Bug #74925 [Opn->Nab]: Mismatching floating values | ||
| References: | 1 | Groups: | php.standards |
| Request: | Send a blank email to standards-+get-1277@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=74925&edit=1
ID: 74925
Updated by: krakjoe@php.net
Reported by: tuepp at gmx dot de
Summary: Mismatching floating values
-Status: Open
+Status: Not a bug
Type: Bug
Package: PHP Language Specification
Operating System: Windows
PHP Version: 7.0.21
Block user comment: N
Private report: N
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://www.floating-point-gui.de/
Thank you for your interest in PHP.
Previous Comments:
------------------------------------------------------------------------
[2017-07-14 14:42:09] tuepp at gmx dot de
Description:
------------
Floating number comparison fails for numbers that have to be rounded internal.
This bug may be over 10 years old. I've reported it 5 years ago and it is still not fixed. Now
I have an example with one instead of 3 lines of code what might be more shoking. I've
documented this bug in my final exam 6 years ago and it feeled like I got some extra points for it -
so thank you. But now it's really time to fix it! I'm not sure if I'll report it a
third time in another 5 years... So go, get it!
Test script:
---------------
<?php
echo (54.83 + 0.01 == 54.84) ? 'ok' : 'fail'; //fail
echo "<br>\n";
echo ((3 * 202.3) == 606.9) ? 'ok' : 'fail'; //fail
echo "<br>\n";
for($v = -1; $v < 0; $v += 0.2){
echo "$v; "; // -1; -0.8; -0.6; -0.4; -0.2; -5.5511151231258E-17;
}
Expected result:
----------------
ok
ok
-1; -0.8; -0.6; -0.4; -0.2
Actual result:
--------------
fail
fail
-1; -0.8; -0.6; -0.4; -0.2; -5.5511151231258E-17;
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=74925&edit=1