note
syphilis
<I>Thank you for the suggestions.</I><br><br>
I think they were completely irrelevant to the problem you're facing.<br>
Silly me didn't think to actually check what the <b>correct</b> calculation of <c>floor( log($num) / log(1000) )</c> should yield under 'long double' (64-bit) precision.
<br><br>When I do check, I find that the correct answer is -12.
<br>The error is in your test script ... either that, or in Math::MPFR:
<c>
use strict;
use warnings;
use Math::MPFR qw(:mpfr);
# Set precision for extended
# precision 'long double'
Rmpfr_set_default_prec(64);
my $num = Math::MPFR->new('1e-33');
my $thou = Math::MPFR->new('1000');
# Convert $num & $thou to their
# respective log()
Rmpfr_log($num, $num, MPFR_RNDN);
Rmpfr_log($thou, $thou, MPFR_RNDN);
print $num / $thou;
# prints -1.10000000000000000009e1
</c>
This indicates that when the floating point precision is 64 bits, the correct floor() result is -12.
<br>And, IIUC, the test script should accept '1000e-36' as correct when NV precision is 64 bits (as is the case with those 2 FAIL reports).
<br><br>Interestingly, with full quad precision of 113 bits, the calculation reverts to returning -11.
<br><br>Cheers,<br>Rob
1210737
1210827