#43572 [Opn->Bgs]: fmod($a,$b) wrong when $b is a multiple of $a
| From: | felipe@php.net | Date: | Tue, 18 Dec 2007 11:51:04 +0000 |
| Subject: | #43572 [Opn->Bgs]: fmod($a,$b) wrong when $b is a multiple of $a | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-120726@lists.php.net to get a copy of this message | ||
ID: 43572
Updated by: felipe@php.net
Reported By: csaba at alum dot mit dot edu
-Status: Open
+Status: Bogus
Bug Type: Math related
Operating System: Win XP
PHP Version: 5.2.5
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://docs.sun.com/source/806-3568/ncg_goldberg.html
Thank you for your interest in PHP.
The value that you expect (0) is obtained using float precision. (In
C)
PHP uses double, and with this type fmod() returns 1.3.
Previous Comments:
------------------------------------------------------------------------
[2007-12-12 10:51:53] csaba at alum dot mit dot edu
Just to be clear:
fmod(9.75,1.625) => 0
Expected, and works correctly for me.
php -n -r "echo fmod(6.5, 1.3);"
=> 1.3
which is not correct (0 is correct)
Csaba
Note that on windows systems, double quotes are needed (because of the
space) instead of the single quotes.
------------------------------------------------------------------------
[2007-12-12 00:55:39] csaba at alum dot mit dot edu
Description:
------------
if $div evenly divides $num, fmod($num, $div) still returns a value not
equal to 0 for almost all decimal $div, where the decimal portion is not
n/2^k for some n and k.
e.g.
fmod(9.75,1.625) => 0 because .125 is 5/2^3
Expected result:
----------------
I expect to see fmod return 0 when the 1st argument is a multiple of
the 2nd.
Csaba Gabor from Vienna
Actual result:
--------------
fmod(6.5, 1.3) => 1.3
which is incorrect
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=43572&edit=1