#47718 [Asn->Csd]: Missing documentation for 64 bit overflows

From: Date: Thu, 19 Nov 2009 11:30:11 +0000
Subject: #47718 [Asn->Csd]: Missing documentation for 64 bit overflows
References: 1  Groups: php.doc.bugs 
Request: Send a blank email to doc-bugs+get-3233@lists.php.net to get a copy of this message
ID: 47718 Updated by: vrana@php.net Reported By: vivekanandan8 at yahoo dot com -Status: Assigned +Status: Closed Bug Type: Documentation problem Operating System: * PHP Version: Irrelevant Assigned To: mattwil New Comment: This bug has been fixed in the documentation's XML sources. Since the online and downloadable versions of the documentation need some time to get updated, we would like to ask you to be a bit patient. Thank you for the report, and for helping us make our documentation better. Previous Comments: ------------------------------------------------------------------------ [2009-11-19 11:30:09] svn@php.net Automatic comment from SVN on behalf of vrana Revision: http://svn.php.net/viewvc/?view=revision&revision=290980 Log: Usual maximum on 64-bits (bug #47718) ------------------------------------------------------------------------ [2009-03-25 11:29:16] vivekanandan8 at yahoo dot com Hi, sorry some character are misdecoded, hence i am giving that onceagain, 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)1to64,Range:-2^w-1 to(2^w-1)-1 for HexaDeciamal Numbers : Width(bits) 1to 64, Range: 0 to 2^w-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&#8722; 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 ?> ------------------------------------------------------------------------ [2009-03-25 11:20:43] vivekanandan8 at yahoo dot com 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: &#8722;2^w&#8722;1 to 2^w&#8722;1&#8722; 1 for HexaDeciamal Numbers : Width(bits) 1to 64, Range: 0 to 2w&#8722; 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&#8722; 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 ?> ------------------------------------------------------------------------ [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

« previous php.doc.bugs (#3233) next »