On Sat, 2004-05-15 at 20:11, Ard Biesheuvel wrote:
[...LONG_MIN / LONG_MAX comparison]
> Hi Timm,
>
> I think this code is broken on 64-bit archs, as doubles lack the
> precision to accurately represent a 64-bit long. Also, comparing double
> values with LONG_[MIN|MAX] is dangerous for the same reason.
Ard, sorry, I don't have any 64-bit machines available to me:) Do you
(or does anybody else) have one?
If so, what does this print?
--------------------------------------------------------------------------
#define LONG_MAX 2147483647L
#define LONG_MIN (- LONG_MAX - 1)
int main(int argc, char* argv)
{
printf("1) %s\n", (double)LONG_MAX + 1 > LONG_MAX ? "+OK" : "-ERR");
printf("2) %s\n", (double)LONG_MIN - 1 < LONG_MIN ? "+OK" : "-ERR");
}
--------------------------------------------------------------------------
I thought this code was OK by looking at the following:
Zend/zend_operators.c:#define DVAL_TO_LVAL(d, l) (l) = (d) > LONG_MAX ?
(unsigned long) (d) : (long) (d)
If it's not [OK], what alternatives exist?
- Timm
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php