$fp2 = -8.2727285363069939e-293;;
printf "% 25.17g\n", $fp2;;
-7.9999999999999948e-293 ### WTF? ###
Hadn't noticed this before - a perl that produces that result is simply brainfucked.
I can reproduce that garbage on a perl-5.18.0 that I built with my Platform_SDK compiler on Windows 7:
C:\>perl -le "printf '%.16e', -8.2727285363069939e-293;"
-7.9999999999999948e-293
Yet, according to the very same perl, the 2 values are entirely different:
C:\>perl -le "print scalar reverse unpack 'h*', pack 'd<', -7.99999999
+99999948e-293;"
83465a792c83e3b6
C:\>perl -le "print scalar reverse unpack 'h*', pack 'd<', -8.27272853
+63069939e-293;"
83498bf832dfdfab
UIM, this is not perl's fault. (But I
am mistaken - see UPDATE and UPDATE2.) Perls built (from the same source) with gcc on the same machine do not suffer this problem.
I would not rely on the accuracy of *any* floating point result that such a perl produced.
UPDATE: After some double-checking I have found that the mingw-w64 gcc-4.7.x x64 compilers built perl-5.18.x with exactly the same problem as the Platform_SDK compiler build.
The problem went away with perl-5.20.0 onwards, but I don't know if that was because of changes to the perl source. I used later versions of gcc to build 5.20.0 onwards - and maybe that's what fixed the issue.
UPDATE2: The problem with 5.18.0 is simply that perl assigns the wrong value to the NV - instead of assigning the hex format 834a6aec8f941351, it assigns 83498bf832dfdfab, which by my calculation is off by 245,141,108,700,070 ULPs. (Such inaccuracies are usually quite small, and I was thrown by the large size of this one.)
Cheers,
Rob
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
|
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.