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