#47718 [Asn]: vivekanandan8@yahoo.
ID: 47718
User updated by: vivekanandan8 at yahoo dot com
-Summary: Integers overflow for 64 bit platform
Reported By: vivekanandan8 at yahoo dot com
Status: Assigned
Bug Type: Documentation problem
Operating System: all os
PHP Version: Irrelevant
Assigned To: mattwil
New Comment:
hi,
sorry, Please ignore the previous comments.
since in PHP zval for storing integer is long data type.
The Data Representation for long is defined by ABI(Application Binary
Interface)
which says that
Bit-field Type: signed long, Width(bits) 1to 64,Range:
−2^w−1 to 2^w−1− 1
for HexaDeciamal Numbers : Width(bits) 1to 64, Range: 0 to 2w−
1
For integers in PHP:
Platform: 32 bit , Range: -2^31 and 2^31-1,Numbers: -2147483648 to
2147483647
Platform: 64 bit , Range: -2^63 and 2^63-1,Numbers:-9223372036854775808
to 23372036854775807
For Hexadeciaml in PHP:
Platform: 32 bit , Range: 0 to 2^32− 1, Numbers: 0 to 4294967295
Platform: 64 bit , Range: 0 to -2^64-1, Numbers: 0 to
23372036854775807
more info regarding
ABi(http://www.x86-64.org/documentation/abi-0.99.pdf)
Example for 64 bit integer overflow
<?php
$large_number=9223372036854775807;
var_dump($large_number);
// output: 2^63-1 for integer as int(9223372036854775807)
$large_number = 9223372036854775808;
var_dump($large_number);
// output: float(9.2233720368548E+18) as 9223372036854775808
$large_number=-9223372036854775807;
var_dump($large_number);
// output: int(-9223372036854775807)
$large_number =(int)-9223372036854775808;
var_dump($large_number);
// output: 2^64 for integer as int(9223372036854775808)
?>
Example for 64 bit Hexadecimal overflow
<?
//2^64-1 is 18446744073709551615
var_dump(0xffffffffffffffff);
// output: float(1.844674407371E+19) as 18446744073709551615
?>
Previous Comments:
------------------------------------------------------------------------
[2009-03-20 18:49:38] kalle@php.net
Matt, you have worked on some 64bit overflows recently, think you
could look into this?
------------------------------------------------------------------------
[2009-03-19 14:46:45] vivekanandan8 at yahoo dot com
Description:
------------
Documentation for 64 bit platform about integers overflow
Reproduce code:
---------------
---
From manual page: language.types.integer
---
Expected result:
----------------
If PHP encounters a number beyond the bounds of the integer type, it
will be interpreted as a float instead.
This above general rule differs depending on whether a 32 bit or 64 bit
platform is used, which is described in the table below
Platform: 32 bit , Range: -2^31-1 and 2^31-1,Numbers: -2147483647 to
2147483647
Platform: 64 bit , Range: -2^63-1 and 2^63-1,Numbers:
-9223372036854775807 to 23372036854775807
<?php
$large_number=9223372036854775807;
var_dump($large_number);
// output: int(9223372036854775807)
$large_number = 9223372036854775808;
var_dump($large_number);
// output: float(9.2233720368548E+18) as 9223372036854775808
//2^64-1 is 18446744073709551615
var_dump(0xffffffffffffffff);
// output: float(1.844674407371E+19) as 18446744073709551615
?>
Actual result:
--------------
No documentation regarding 64 bit platform in online php manual also.i
added these info as add a note even it is not approved. i am interested
in contributing php manual.please do the needful.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=47718&edit=1
Thread (5 messages)