#47718 [Asn]: vivekanandan8@yahoo.

From: Date: Wed, 25 Mar 2009 11:29:16 +0000
Subject: #47718 [Asn]: vivekanandan8@yahoo.
References: 1  Groups: php.doc.bugs 
Request: Send a blank email to doc-bugs+get-2041@lists.php.net to get a copy of this message
 ID:               47718
 User updated by:  vivekanandan8 at yahoo dot com
 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 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− 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-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



Thread (5 messages)

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