large float's

Do you have a question? Post it now! No Registration Necessary.  Now with pictures!

Threaded View
According to, the largest possible float is ~1.8e308. offers more insight, suggesting that is, exactly,
0x7FEFFFFFFFFFFFFF.  This sorta begs the question...  how can this
number be represented in PHP without resorting to the decimal notation?


...doesn't work.  Nor does...

echo hexdec('7FEFFFFFFFFFFFFF');

So...  any ideas as to what will work?

Re: large float's

yawnmoth said the following on 23/02/2006 06:00:
Quoted text here. Click to load it

The maximum floating-point value is platform dependent. For a 64-bit  
platform, it's ~1.8e308, but for a 32-bit platform it's ~3.4e38  
(assuming you're using the IEEE 754 standard).

This code converts from a hex-representation to a floating-point  
representation (for 32-bit):

define("LENGTH", 32);
define("SIGN_BIT", 31);
define("EXPONENT_MSB", 30);
define("EXPONENT_LSB", 23);
define("MANTISSA_MSB", 22);
define("MANTISSA_LSB", 0);

function hex2float($strHex)
    $dec = hexdec($strHex);
    $sign = ($dec & (1 << SIGN_BIT)) != 0;
      $exp = (($dec & ((2 << EXPONENT_MSB) - (1 << EXPONENT_LSB))) >>  
          - (1 << (EXPONENT_MSB - EXPONENT_LSB))
    $man = (($dec & ((2 << MANTISSA_MSB) - (1 << MANTISSA_LSB))) >>  
          + (2 << (MANTISSA_MSB - MANTISSA_LSB));
      $float = floatval($man * pow(2, $exp) * ($sign ? -1 : 1));

For a 64-bit version, you'll need to alter the constants; you can get  
the required values from .

Note that this code doesn't deal with special cases, i.e. NaN, infinity,  


Re: large float's

Oli Filth wrote:
Quoted text here. Click to load it

Actually the bit-ness of a CPU only refers to its integer handling
capability. Nearly all FPUs--even the ancient 8087--can handle both
single and double precision floating points.

Float points in PHP are defined as doubles, which in C are always
64-bit IIRC.

Site Timeline