NAME
Math::NV - assign correct value to perl's NV
DESCRIPTION
use Math::NV qw(:all);
my $nv = nv('1e-298'); # ie the number 10 ** -298
The above snippet will assign a correct value for 1e-298 to $nv.
Doing simply "$nv = 1e-298;" may *not* do that. (The test suite
specifically checks and reports whether 1e-298 can correctly be
assigned directly to a perl scalar. It also checks some other
values).
The nv() function assigns the value at the C (XS) level using
either the C function strtod() or strtold() - whichever is
appropriate for your perl's configuration.
Obviously, we are therefore relying upon absence of bugs in the
way your compiler/libc assigns strings to floats. (Hopefully, if
such bugs are present, this will become evident in the form of
failures in the module's test suite.)
FUNCTIONS
$nv = nv($str);
On perls whose NV is a C "double", assigns to $nv the value that
the C standard library function strtod($str) assigns.
On perls whose NV is a C "long double", assigns to $nv the value
that the C standard library function strtold($str) assigns.
$nv_type = nv_type();
Returns either "double" or "long double", depending upon the way
perl has been configured.
The expectation is that it returns the same as $Config{nvtype}.
(Please file a bug report if you find otherwise.)
$digits = mant_dig();
Returns the number of bits the NV mantissa contains. This is
normally 53 if nv_type() is double - otherwise usually (but by no
means always) 64.
It returns the value of the C macro DBL_MANT_DIG or LDBL_MANT_DIG,
depending upon whichever is appropriate for perl's configuration.
($mantissa, $exponent, $precision) = ld2binary($nv, $flag);
Returns a base 2 representation of the long double value contained
in the NV $nv.
If $flag is true, it also prints out additional information during
calculation.
$mantissa is the mantissa (significand).
$exponent is the exponent.
$precision is the precision (in bits) of the mantissa - trailing
zero bits are not counted.
For doubles, use Data::Float's float_hex($nv) - which also works
for long double NV's on most architectures (but not powerpc).
($mantissa, $exponent, $precision) = ld_str2binary($str, $flag);
Returns a base 2 representation of the long double value
represented by the string $str.
If $flag is true, it also prints out additional information during
calculation.
$mantissa is the mantissa (significand).
$exponent is the exponent.
$precision is the precision (in bits) of the mantissa - trailing
zero bits are not counted.
For doubles, use Data::Float's float_hex($str) - which also works
for long double NV's on most architectures (but not powerpc).
LICENSE
This program is free software; you may redistribute it and/or modify
it under the same terms as Perl itself.
Copyright 2013 Sisyphus
AUTHOR
Sisyphus <sisyphus at(@) cpan dot (.) org>