Subtracting Large Numbers

Do you have a question? Post it now! No Registration Necessary.  Now with pictures!

Threaded View
I am puzzled by the following code:

print "<p>MaxInt=".PHP_INT_MAX;
$AA = -190668411;
$BB = -2181087916;
print "<br>AA=$AA";
print "<br>BB=$BB";
$AA = (int)$AA + (int)$BB;
print "<br>AA+BB=$AA";

On some systems, I get:


On others, I get:


Why the difference?


Re: Subtracting Large Numbers

Bruce wrote:
Quoted text here. Click to load it

"The maximum value depends on the system. 32 bit systems have a maximum signed  
integer range of -2147483648 to 2147483647. So for example on such a system,  
intval('1000000000000') will return 2147483647. The maximum signed integer value  
for 64 bit systems is 9223372036854775807."

Depends on system, OS, math libraries, cpu type etc...

Michael Austin.
Consultant - Available.
Donations welcomed. Http://

Re: Subtracting Large Numbers

Actually, this appears to be an issue with how floats are converted to
ints. For example:

    $BB = -2181087916;
    $AA = (int)$BB;
    $AA = intval($BB);

On some systems, $AA will be int(-2147483648), which is actually
consistent with the documentation.

On most systems, however, $AA will be int(2113879380), which is the
same value truncated at 32 bits.

I actually need the latter behavior, as it needs to duplicate Delphi
code, which, like C, behaves the same way.

Any ideas how I can do this?

On Fri, 17 Feb 2006 23:43:49 GMT, Michael Austin

Quoted text here. Click to load it

Site Timeline