About http://git.php.net/?p=php-src.git;a=commitdiff;h=79956330fe17cfd5f60de456497541b21a89bddf (For now, I have reverted this fix)
Here some explanations. LONG_MAX is 9223372036854775807 (0x7fffffffffffffff) double representation of LONG_MAX is 9223372036854775808 (d > LONG_MAX) is evaluated in double space. So is false for double which have the same value than (double)LONG_MAX. So, for (double)LONG_MAX the cast used is (long)d 9223372036854775807 on ppc64 9223372036854775808 on x86_64 (gcc without optimization) 9223372036854775807 on x86_64 (gcc -O2) PHP expected value is 9223372036854775808 (Btw, I don't understand why PHP, build on x86_64, with -O2, gives the good result, some environment mystery) Obviously, we could have different result on different platform, compiler, architecture. I will be very interested by result on other platform (mac, windows), compiler (Visual C), architecture. If we switch to the unsigned cast: (long)(unsigned long)d; The result is always 9223372036854775808 (which is expected) So my proposal, is to use the unsigned cast for (double)LONG_MAX value. - if (d > LONG_MAX) { + if (d >= LONG_MAX) { >From my tests, this doesn't change anything on x86_64, and improves ppc64 (same result, so at least 9 unit tests succeed) Any comments ? If you agree, I will apply this patch again. Regards, Remi -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php