http://www.perlmonks.org?node_id=974383


in reply to Re^21: supporting quads on 32 bit Perl
in thread supporting quads on 32 bit Perl

0x43efe00000000000 is 0100001111101111111000000000000000000000000000000000000000000000 (you were missing the first 0 bit).

Removing the sign bit and the exponent and prepending the implicit 1., results in 1.1111111000000000000000000000000000000000000000000000. So the number is 0b1.1111111 * 2** (0b10000111110 - 1023) = 0b1.1111111 * 2 ** 63 = 0xff00_0000_0000_0000. The number can be represented precisely as an NV because its last bits are zero.

The problem seems related to the MS compiler not converting correctly between NVs and uint64.

Could you try the current GitHub version and post here the output from MSC.t?