Bug #12612 Updated: unsigned integer problem
| From: | jeroen@php.net | Date: | Tue, 07 Aug 2001 21:18:46 +0000 |
| Subject: | Bug #12612 Updated: unsigned integer problem | ||
| References: | 1 | Groups: | php.dev |
| Request: | Send a blank email to php-dev+get-62496@lists.php.net to get a copy of this message | ||
ID: 12612
Updated by: jeroen
Reported By: dimon@postmark.net
Status: Closed
Bug Type: Scripting Engine problem
Operating System: Windows 2000 Server SP1 5.0.2195
PHP Version: 4.0.4pl1
Assigned To: jeroen
New Comment:
This url will also work outside "Jeroen's intranet" ;-)
http://www.php.net/manual/en/language.types.integer.php
Previous Comments:
------------------------------------------------------------------------
[2001-08-07 17:17:00] jeroen@php.net
From http://www.docs.intranet.giga/php/language.types.integer.html:
From floating point numbers
When converting from float to integer, the number will be rounded towards zero.
If the float is beyond the boundaries of integer (usually +/- 2.15e+9 = 2^31), the result is
undefined, since the float hasn't got enough precision to give an exact integer result. No
warning, not even a notice will be issued in this case!
(I should have known, I wrote that myself...)
So there this is "feature", AKA documented bug. Feel free to open a feature request to get
that changed...
In the manual it should be better noted in integers -> big number section that it goes for hex
too. I'll do that in a minute.
Status -> Closed (for the abs() bug)
------------------------------------------------------------------------
[2001-08-07 17:04:39] jeroen@php.net
I wan't really clear on this one: PHP _does not support unsigned ints_
Generally, it support integers from -2147483648 to 2147483647
------------------------------------------------------------------------
[2001-08-07 16:54:30] jeroen@php.net
PHP 4 handles number-constants smartly. I.e., when a number is out of range of integers, it will be
auto-converted to float.
var_dump(0x80000000) -> float(2147483648)
While | requires int-arguments, and because it cannot convert float(2147483648) to int, it will take
MAX_INT instead.
That abs(MINIMAL_INT) bug, is a bug which I fixed yesterday (coincidence...)
The 0x80000000 | 0; : apparently
(int) 2147483648.0 => -2147483648
This IS a bug, because it should have been INT_MAX (2147483647)
I'm currently trying to sort that out. By the way, do not put multiple bugs in one report.
------------------------------------------------------------------------
[2001-08-07 05:10:52] dimon@postmark.net
$qq = 0x80000000;
echo $qq; //2147483648 ok
$qq = 0x80000000 | 0;
echo $qq; //-2147483648 ???
echo abs($qq); //-2147483648 ???
echo $qq * -1; //2147483648
------------------------------------------------------------------------
Edit this bug report at http://bugs.php.net/?id=12612&edit=1