ID: 49330
Updated by: [email protected]
Reported By: john at sinteur dot com
-Status: Open
+Status: Bogus
Bug Type: Math related
Operating System: FreeBSD, Mac OS
PHP Version: 5.2.10
New Comment:
Thank you for your report.
The behavior you report is not a bug. If PHP encounters a number beyond
the bounds of the integer type, it will be interpreted as a float
instead. That is why it is possible to have $xxx bigger than
PHP_INT_MAX. Operands of modulus are converted to integers (by stripping
the decimal part) before processing. That is why the $xxx is wrapped
around for the modulo operator.
PHP_INT_MAX % $a == 2147483647 % $a
(PHP_INT_MAX + 1) % $a == -2147483648 % $a
Previous Comments:
------------------------------------------------------------------------
[2009-08-22 16:22:33] john at sinteur dot com
Description:
------------
Counting doesn't appear to wrap properly at 32 bits
Reproduce code:
---------------
$xxx=0;
while (true) {
$xxx++;
if ($xxx%10000000 == 0)
print $xxx . "\n";
}
Expected result:
----------------
10000000
20000000
30000000
40000000
50000000
...(etc)
2120000000
2130000000
2140000000
2150000000
2160000000
2170000000
2180000000
Actual result:
--------------
10000000
20000000
30000000
40000000
50000000
...(etc)
2120000000
2130000000
2140000000
2154967296
2164967296
2174967296
2184967296
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=49330&edit=1