Join GitHub today
GitHub is home to over 50 million developers working together to host and review code, manage projects, and build software together.Sign up
(blead as of 033a6f7)
Looks like IRIX long double (which happens to be big-endian double-double, but not using PPC as usual, but instead MIPS), has some issues with infinities.
(1) If infinities are involved, multiplication is producing garbage bytes in the second double of the double-double.
If I add byte hexdumps for the NV in Perl_do_ncmp (which is called by pp_eq) I can see for example:
./perl -wle '"Inf"*1 == "Inf"+0'
./perl -wle '"Inf"*"Inf" == "Inf"+0'
The "7f f0" prefix is correct, and all that is needed for an infinity, the rest of the bytes should be zeros.
The "3f f0" and "7f ef ff ... ff" after the midpoint (the second double of double-double) are unexpected garbage.
(2) Then comparison of infinities (pp_eq, the last branch which compares NVs) seems to have issues: if e.g. the above bogus infinity
7f f0 00 00 00 00 00 00 3f f0 00 00 00 00 00 00
is compared with the true infinity, the bogus one is deemed to be "greater than", presumably because of the non-zero bytes.
Because of these together, the following t/op/infnan.t tests are failing:
not ok 14 - twice Inf is Inf
Note that this is all with long doubles: with normal doubles, no problems in IRIX.
On Sun Oct 18 19:31:02 2015, jhi wrote:
Resolved in http://perl5.git.perl.org/perl.git/commit/3ec400f5ce53ea1a56d283bc6bf59e75762df058