ID: 49300 User updated by: looris at gmail dot com 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:
actually, it's supposed to do just this kind of thing. compared to C, it allows you not to declare variables, not to malloc memory you want to use, not to destroy that memory, not to care about converting variables from one type to another, not to care about types at all. it does a whole lot of things, all aimed at removing that burden from the developer, so yes, it would be perfectly natural for it to store floats in a much friendlier way when it's needed. Previous Comments: ------------------------------------------------------------------------ [2009-08-21 12:10:01] ras...@php.net 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. ------------------------------------------------------------------------ [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. . ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/49300 -- Edit this bug report at http://bugs.php.net/?id=49300&edit=1