ID: 49300 Updated by: ras...@php.net Reported By: looris at gmail dot com Status: Bogus Bug Type: Unknown/Other Function Operating System: debian stable PHP Version: 5.2.10 New Comment:
Just curious, have you filed this bug against every other high-level language? Because they all behave like this. It is not PHP's job to invent a better way to store floating point values. Previous Comments: ------------------------------------------------------------------------ [2009-08-20 12:43:38] looris at gmail dot com unfortunatly, you do not understand how languages work. a high level language, like php, must (MUST, not should!) abstract all the low level mechamisms. a developer who writes php code must not be required to know how things work at levels below that of php. if something unexpected like this happens, it's php's fault, not programmer's! every time someone finds a thing that is clearly a bug (clearly to any sane person) and you state "it's working as intended", you only fool yourself. what's the point in programming in a high level language, if that languages behaves in an unpredictable way, and its developers are happy with it? I don't care how php handles floating point numbers internally, it may send all the data to a pair of monkey who do the math with pen and paper and then send it back to the program for all I care (and that at least would explain some oddities). I perfectly know how floats are represented in computers, dude. I perfectly know that it's a rounding issue caused by the conversion from decimal to binary... I just don't care. While I code in php I expect the language to be fool-proof, and I expect it to solve this problems without me having to bother. It can be done, just use a fractional representation for floats until you are forced to switch to a normal one. I mean, I know you never will, but it's still my duty to tell you what you should do. ------------------------------------------------------------------------ [2009-08-20 12:18:41] scott...@php.net Unfortunately you're not understanding how floating point maths is represented with a computer. Read the link that derick pointed you to or have a quick look at wikipedia. ------------------------------------------------------------------------ [2009-08-20 10:36:22] looris at gmail dot com what are you talking about? string representation? the second loop loops 8 times, when it should have looped only 7 times. and using < or <= gives exactly the same result: it still loops for 0.8 when it shouldn't (since i wrote $value<0.8) I assumed you would notice it but clearly you didn't, I'll be more descriptive next time. We do agree that if $value is 0.8, the expression $value<0.8 is FALSE, now do we? ------------------------------------------------------------------------ [2009-08-20 08:58:58] der...@php.net 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. . ------------------------------------------------------------------------ [2009-08-19 20:39:01] looris at gmail dot com Description: ------------ Just look at the code. Reproduce code: --------------- <?php for ($value=0.1; $value<0.6; $value+=0.1) { echo $value."\n"; } echo "\n"; for ($value=0.1; $value<0.8; $value+=0.1) { echo $value."\n"; } ?> Expected result: ---------------- 0.1 0.2 0.3 0.4 0.5 0.1 0.2 0.3 0.4 0.5 0.6 0.7 Actual result: -------------- 0.1 0.2 0.3 0.4 0.5 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=49300&edit=1