yawnmoth said the following on 23/02/2006 06:00:
According to php.net, the largest possible float is ~1.8e308.
wikipedia.org 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?
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))) >>
EXPONENT_LSB)
- (1 << (EXPONENT_MSB - EXPONENT_LSB))
- (MANTISSA_MSB - MANTISSA_LSB);
$man = (($dec & ((2 << MANTISSA_MSB) - (1 << MANTISSA_LSB))) >>
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
http://stevehollasch.com/cgindex/coding/ieeefloat.html.
Note that this code doesn't deal with special cases, i.e. NaN, infinity,
etc.
--
Oli