Thank you for the suggestions.
I think they were completely irrelevant to the problem you're facing.
Silly me didn't think to actually check what the correct
calculation of floor( log($num) / log(1000) )
should yield under 'long double' (64-bit) precision.
When I do check, I find that the correct answer is -12.
The error is in your test script ... either that, or in Math::MPFR:
use Math::MPFR qw(:mpfr);
# Set precision for extended
# precision 'long double'
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
This indicates that when the floating point precision is 64 bits, the correct floor() result is -12.
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).
Interestingly, with full quad precision of 113 bits, the calculation reverts to returning -11.
Are you posting in the right place? Check out Where do I post X? to know for sure.
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
Want more info? How to link or
or How to display code and escape characters
are good places to start.