Edit report at https://bugs.php.net/bug.php?id=50080&edit=1

 ID:                 50080
 Updated by:         ras...@php.net
 Reported by:        aidevelopment at gmail dot com
 Summary:            1 bit short of an 8 byte integer
 Status:             Not a bug
 Type:               Bug
 Package:            Variables related
 Operating System:   Linux 2.6.15-26-server
 PHP Version:        5.2.11
 Block user comment: N
 Private report:     N

 New Comment:

It is quite clearly stated in the documentation exactly where you would expect 
it 
to be at http://php.net/types where it says:

The size of an integer is platform-dependent, although a maximum value of about 
two billion is the usual value (that's 32 bits signed). 64-bit platforms 
usually 
have a maximum value of about 9E18. PHP does not support unsigned integers.


Previous Comments:
------------------------------------------------------------------------
[2013-06-02 22:10:08] gustav at svalander dot eu

If PHP does not support uint64 then it should be clearly stated in the 
documentation. This crap cost me 8h.

------------------------------------------------------------------------
[2009-11-05 01:56:01] aidevelopment at gmail dot com

Hi Jani,

Thanks for the update. Please, allow me to clarify my last post.

With the information you've given, we know the 64th bit (far left), is reserved 
for sign. 

With a simple two line script, we can see that 0 = positive, therefore 1 = 
negative.

//determine positive vs. negative (observe far left bit).
$a=5;
printf("a = '%b'", $a);

The example below will show the difference between actual expected result when 
increasing integers past the maximum value of an unsigned int.

//set a equal to the max
$a = 0x7FFFFFFFFFFFFFFF;

//add one
$a++;

//Expecting a variable wrap here. e.x. $a = -0x7FFFFFFFFFFFFFFF
//Actual result is $a = negative 0
printf("a = '%b'", $a);

//add one
$a++;

//Given a is now actually equal to negative 0
//Expecting a = 1;
//Actual result is $a = negative 0 (unchanged).
printf("a = '%b'" ,$a);

I would appreciate if you would explain how giving the incorrect answer to a 
simple mathematical formula (x+1) is not a bug. If this is in fact a bug, 
please re-open, reassign and/or recategorize this bug appropriately. Thanks!

Cheers!
Steve

------------------------------------------------------------------------
[2009-11-04 22:51:22] j...@php.net

No.

------------------------------------------------------------------------
[2009-11-04 17:59:05] aidevelopment at gmail dot com

I understand what you are saying. However, the handling is very difficult to 
understand. As you can see, adding 1 simply has no effect past positive 0 
(1000000000000000000000000000000000000000000000000000000000000000). I have not 
been able to determine yet exactly what happens when you explicitly assign a 
variable to a value "too large".

Is there no way to have PHP utilize 64 bit values (uint64)?

------------------------------------------------------------------------
[2009-11-04 17:17:58] sjo...@php.net

In a 64 bit integer, 1 bit indicates the sign and 63 bits are left for the 
number. Thus the range is from -2^63 to 2^63, giving 2^64 numbers.

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


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

    https://bugs.php.net/bug.php?id=50080


-- 
Edit this bug report at https://bugs.php.net/bug.php?id=50080&edit=1

Reply via email to