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


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

From what I read about floating points a couple days ago, exact powers of 2 floating points suffer no rounding/precision loss
Well, not exactly. IEEE 754 double-precision floats can represent precisely any number with 53 binary digits (and that covers all the integers up to 2**53 and all the powers of two).

It is the same as using decimal scientific notation. For instance, with a number of the form XXXeXX you can represent precisely any integer between 0 an 999, but then you can also represent precisely 5670, 56700, 567000, 5670000, etc.

The reason of the MSC.t is that at some point, one of the errors on the compilation logs from the ActiveState build server was:

Int64.xs(340) : error C2520: conversion from unsigned __int64 to doubl +e not implemented, use signed __int64
There were other places where NVs where converted to uint64 and back even if the compiler didn't spot them, so I added the MSC.t tests to ensure that they were correctly handled... but the thing is that they are not! (see also this).

Now, as a work around, I have implemented my own NV->uint64 conversion that will be used instead of the default one when the module is compiled by any MS compiler.

Could you test the git version again?