The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

Perl fails to assign many floating point values correctly ... and by "many", I mean millions.
(Perhaps there are some platforms where this is not the case, but I don't know of any.)

The errors are not huge, and they apply generally to values in a range in which very few people
work - many people are not concerned about them.
For example, on my Ubuntu-12.04 system, I've not found any errors in the range 1e-23 .. 3e23. That's 
not to say no such errors exist inside that range.

Anyway, this module just provides a few functions for examining the values, and an nv() function that
assigns the values via the C compiler/libc.
On perl builds that have an nvtype of "double", the nv() function is essentially the same as the
POSIX::strtod() function.
Unfortunately, the POSIX module doesn't provide a strtold() function, and can therefore not be
used for the same purpose on builds of perl where the nvtype is "long double". The nv() function
does, however, also work on "long double" builds of perl.

Then there's always the possibility of bugs in C's strtod()/strtold() functions. My mingw.org port
of gcc-4.7.0 suffers a bug in strtod(), though it's the only compiler I've found to be buggy in this
regard. It's a bug that doesn't strike very often, but it's enough to destroy one's confidence that
strtod() is behaving correctly. (Just my luck !!)

If you want to be really paranoid about it, the surest way of assigning the correct floating point
value in perl is to have the mpfr library assign the value. That is, instead of doing:

my $nv = 1e-298;

Do something like:

use Math::MPFR qw(:mpfr);
Rmpfr_set_default_prec(Math::MPFR::_DBL_MANT_DIG());    # if nvtype is double
# alternatively:
# Rmpfr_set_default_prec(Math::MPFR::_LDBL_MANT_DIG()); # if nvtype is long double
my $nv = Rmpfr_get_NV(Math::MPFR->new('1e-298'), MPFR_RNDN);

Cheers,
Rob