Bug #13407 Updated: array index "2147483647" not equivalent to 2147483647

From: Date: Sun, 23 Sep 2001 19:18:02 +0000
Subject: Bug #13407 Updated: array index "2147483647" not equivalent to 2147483647
References: 1  Groups: php.dev 
Request: Send a blank email to php-dev+get-66415@lists.php.net to get a copy of this message
ID: 13407
Updated by: jeroen
Reported By: trobinson@gksystems.com
Status: Open
Bug Type: Unknown/Other Function
Operating System: 
PHP Version: 4.0.4pl1
New Comment:

I assume there somewhere needs to be one more than the index, for some reason... people should,
IMHO, realize that computers have limited capacity for integer numbers, well, at least most
languages do.

And wether it goes wrong at max-1 or exactly at max, isn't really an issue IMO. You should not
rely on the outer regions of the capacity of integer numbers.

But there is one other reason why this isn't bogus after all, because $ar[ digits ] and $ar[
"digits" ] (digits := [0-9]+ ) should be equivalent. This is true inside the bounds
(because both come down to an integer), and outside the bounds (because both come down to the same
string). But for this case it is NOT true... 

Previous Comments:
------------------------------------------------------------------------

[2001-09-23 15:06:43] jeroen@php.net

I assume there somewhere needs to be one more than the index, for some reason... people should,
IMHO, realize that computers have limited capacity for integer numbers, well, at least most
languages do.

And wether it goes wrong at max-1 or exactly at max, isn't really an issue IMO. You should not
rely on the outer regions of the capacity of integer numbers.

But there is one other reason why this isn't bogus after all, because $ar[ digits ] and $ar[
"digits" ] (digits := [0-9]+ ) should be equivalent. This is true inside the bounds
(because both come down to an integer), and outside the bounds (because both come down to the same
string). But for this case it is NOT true... 

------------------------------------------------------------------------

[2001-09-23 14:59:10] rasmus@php.net

Hrm..  Sure, that is the kneejerk response, but "too near"?  2147483647 is 2^31 - 1.  I
could understand if this happened at 2^31+1 and up, but not at 2^31 - 1.  I'd like to see a
better explanation of why this happens at  instead of at 21474836478

------------------------------------------------------------------------

[2001-09-23 14:52:16] jeroen@php.net

Integers are limited in capacity, you're too near the bounds of integer. If you need such high
numbers, see GMP.

Not a bug. (though technically it could be possible to let this single number work, the next one
will fail.)

Do a var_dump($ar) to see what happens.

------------------------------------------------------------------------

[2001-09-23 14:44:33] trobinson@gksystems.com

$ar["2147483646"]="apples";
$ar["2147483647"]="oranges";
echo $ar[2147483646];
echo $ar[2147483647];

produces: 
apples

------------------------------------------------------------------------



Edit this bug report at http://bugs.php.net/?id=13407&edit=1



Thread (6 messages)

« previous php.dev (#66415) next »