From: hakon at haugnes dot name Operating system: Redhat 8.0 PHP version: 4.3.2 PHP Bug Type: *Math Functions Bug description: modulus operator problem with large numbers
Description: ------------ The modulus operator % returns wrong results if the number gets large. In a program used to calculate primes, it will find that large numbers, ending in 5, are prime. The following are calculations using % on such a large number, note that all numbers used in the MOD calculation are whole integers (and should not suffer rounding by MOD): MOD: 53253252355 % 3=1 DIV: 53253252355 / 3=17751084118.333332061767578125 MOD: 53253252355 % 4=3 DIV: 53253252355 / 4=13313313088.75 MOD: 53253252355 % 5=2 DIV: 53253252355 / 5=10650650471 Obviously, any number ending in 5 cannot be prime, since it will always be divisible by 5. The MOD result on 5 is therefore wrong, as the division proves. Reproduce code: --------------- $i=53253252355; ini_set("precision",35); for ($m=2; $m<=$i; $m++){ echo "MOD: $i % $m=". $i % $m ; echo "DIV: $i / $m=". $i/$m ."<Br>"; } Expected result: ---------------- I would expect to see MOD: 53253252355 % 3=1 DIV: 53253252355 / 3=17751084118.333332061767578125 MOD: 53253252355 % 4=3 DIV: 53253252355 / 4=13313313088.75 MOD: 53253252355 % 5=0 DIV: 53253252355 / 5=10650650471 Actual result: -------------- However, this is produced: ([THE ERROR] added for your convenience) MOD: 53253252355 % 3=1 DIV: 53253252355 / 3=17751084118.333332061767578125 MOD: 53253252355 % 4=3 DIV: 53253252355 / 4=13313313088.75 MOD: 53253252355 % 5=2 [THE ERROR] DIV: 53253252355 / 5=10650650471 -- Edit bug report at http://bugs.php.net/?id=25328&edit=1 -- Try a CVS snapshot (php4): http://bugs.php.net/fix.php?id=25328&r=trysnapshot4 Try a CVS snapshot (php5): http://bugs.php.net/fix.php?id=25328&r=trysnapshot5 Fixed in CVS: http://bugs.php.net/fix.php?id=25328&r=fixedcvs Fixed in release: http://bugs.php.net/fix.php?id=25328&r=alreadyfixed Need backtrace: http://bugs.php.net/fix.php?id=25328&r=needtrace Try newer version: http://bugs.php.net/fix.php?id=25328&r=oldversion Not developer issue: http://bugs.php.net/fix.php?id=25328&r=support Expected behavior: http://bugs.php.net/fix.php?id=25328&r=notwrong Not enough info: http://bugs.php.net/fix.php?id=25328&r=notenoughinfo Submitted twice: http://bugs.php.net/fix.php?id=25328&r=submittedtwice register_globals: http://bugs.php.net/fix.php?id=25328&r=globals PHP 3 support discontinued: http://bugs.php.net/fix.php?id=25328&r=php3 Daylight Savings: http://bugs.php.net/fix.php?id=25328&r=dst IIS Stability: http://bugs.php.net/fix.php?id=25328&r=isapi Install GNU Sed: http://bugs.php.net/fix.php?id=25328&r=gnused