php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #12243 Large numbers not behaving as doubles
Submitted: 2001-07-18 23:13 UTC Modified: 2002-07-06 01:00 UTC
Votes:1
Avg. Score:5.0 ± 0.0
Reproduced:1 of 1 (100.0%)
Same Version:0 (0.0%)
Same OS:0 (0.0%)
From: matysekj at usms dot org Assigned:
Status: No Feedback Package: Variables related
PHP Version: 4.0.6 OS: FreeBSD 4.1.1-STABLE
Private report: No CVE-ID: None
Have you experienced this issue?
Rate the importance of this bug to you:

 [2001-07-18 23:13 UTC] matysekj at usms dot org
$testnumber = 5000000000;
echo $testnumber;

The result is 2147483647.  The variable is of type integer, even though it was initialized with a double value.  I first noticed this with PHP 4.05 and it still occurs with 4.05.  I do not believe it behaved this way back when I had 4.03PL1 installed.

My configure line is:
 './configure' '--with-gd=no' '--with-mysql=/usr/local' '--with-config-file-path=/usr/home/priraise/phpini' '--enable-debug=no' '--enable-track-vars=yes' '--enable-ftp=yes' '--enable-force-cgi-redirect=yes' '--with-openssl' '--enable-trans-sid' '--enable-xml'

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2001-07-18 23:34 UTC] matysekj at usms dot org
I've verified that this behavior is relatively new. It does not happen in 4.03PL1, but does in 4.05 and 4.06.
 [2001-07-18 23:52 UTC] cynic@php.net
1) longlong != double
2) the scale is HW-dependant, i. e. you need a 64-bit HW to get native support for 64-bit numbers. that's how it's always been in PHP. there was no change WIRT this.

5,000,000,000 is clearly more than your HW can take, so it's clipped to the closest possible value.
 [2001-07-19 00:03 UTC] matysekj at usms dot org
If this is strictly hardware related, then how come when I run the exact same 2 lines on another box running linux, I get the correct 5 billion number displayed?  The linux box is using an AMD 450 Mhz K6, and the FreeBSD box is using a Pentium 3-600.  I am not able to back up to 4.03PL1 on the FreeBSD box, but I am quite sure that this problem did not occur back when it was loaded.
 [2001-07-19 00:15 UTC] cynic@php.net
are you sure you don't initialize the variable with 5 Million on the Linux box?
 [2001-07-19 00:23 UTC] matysekj at usms dot org
Absolutely. I've written just one test script with just those 2 lines in it.  I copied this same file to 3 servers now - the 2 that I've already mentioned plus another FreeBSD server (identical in hardware and OS config to the other) running 4.03PL1.  The only one of these servers that prints out 2147483647 is the FreeBSD server running 4.06 (also did it with 4.05).  The other 2 servers print out 5000000000.  I also remember another location in my site that was affected by this bug, and I can GUARANTEE that it did not occur on the affected server until I updated it to 4.05. Please change the status of this bug report back to open.
 [2001-07-19 01:59 UTC] cynic@php.net
at your service
 [2001-08-08 19:02 UTC] jeroen@php.net
So you say that 

var_dump(5000000000) -> int(2147483647)
And not, as expected:
float(5000000000)

PHP uses some system routines for that, this isn't coded in PHP.


Zend/zend_language_scanner.l:line_1000:
(...)
    errno = 0;
    /*long*/ lval = strtol(the_digit_as_a_string, NULL, 0);
    if (errno == ERANGE) { /* overflow */
(...)

If strtol is doing his job right, there is no bug here...
Are you sure this didn't happen with the older PHP-version, on the same box? Or is it just another pentium-bug (j/k)

It would help if you try to execute these lines in C, and see wether ERANGE is set correctly. If it is, I'm lost.


By the way, please try also some other values than 5 billion, some really huge values, and also some really negative values. Please use var_dump on them.
 [2002-06-02 14:08 UTC] derick@php.net
Please try with the latest PHP version.

Derick
 [2002-07-06 01:00 UTC] php-bugs at lists dot php dot net
No feedback was provided for this bug for over a month, so it is
being suspended automatically. If you are able to provide the
information that was originally requested, please do so and change
the status of the bug back to "Open".
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Fri Apr 19 14:01:30 2024 UTC