Sisyphus > Math-NV-0.08 > Math::NV

Math-NV-0.08.tar.gz

Dependencies

Annotate this POD

# CPAN RT

 Open 1
View/Report Bugs
Module Version: 0.08

# NAME

Math::NV - assign to NV using C's strtod/strtold/strtoflt128 (as appropriate)

# DESCRIPTION

```   use Math::NV qw(:all);
my \$nv = nv('1e-298'); # ie the number 10 ** -298
# or, in list context:
my(\$nv, \$iv) = nv('1e-298');

The nv() function assigns the specified value of its argument using
the C function strtod(), strtold(), or strtoflt128() - whichever
is appropriate for your perl's configuration. (The value assigned
by the C function may differ to the one that perl assigns.)
\$iv is set to the number of characters in the input string that
were unparsed.

NOTE:
It's not guaranteed that nv(\$nv) and nv("\$nv") will return the
same value. For example, on many of my 64-bit MS Win
builds of perl, a print() of nv('1e-298') will output 1e-298,
whereas a print() of nv(1e-298) outputs 9.99999999999999e-299.```

# FUNCTIONS

```   \$nv = nv(\$str);        # scalar context
(\$nv, \$iv) = nv(\$str); # list context

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.
On perls whose NV is a C "__float128", assigns to \$nv the value
that the C standard library function strtofloat128(\$str) assigns.
In list context, also returns the number of characters that were
unparsed (ignored).

\$nv_type = nv_type();

Returns "double", "long double", or "__float128" 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.)

\$bool = is_eq(\$str);
Returns true if the value perl assigns from the string \$str is
equal to the value C assigns from the same string.
Else returns false.

\$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, LDBL_MANT_DIG,
or FLT128_MANT_DIG depending upon whichever is appropriate for
perl's configuration.

(\$mantissa, \$exponent, \$precision) = ld2binary(\$nv);

Uses code taken from tests/tset_ld.c in the mpfr library source
and returns a base 2 representation of the value contained in the
NV \$nv - irrespective of whether the NV type (\$Config{nvtype}) is
double, long double or __float128.
\$mantissa is the mantissa (significand).
\$exponent is the exponent.
\$precision is the precision (in bits) of the mantissa - trailing
zero bits are not counted.

(\$mantissa, \$exponent, \$precision) = ld_str2binary(\$str);

Uses code taken from tests/tset_ld.c in the mpfr library source
and returns a base 2 representation of the value of the NV
represented by the string \$str - irrespective of whether the NV
type (\$Config{nvtype}) is double, long double or __float128.
\$mantissa is the mantissa (significand).
\$exponent is the exponent.
\$precision is the precision (in bits) of the mantissa - trailing
zero bits are not counted.

\$nv = bin2val(\$mantissa, \$exponent, \$precision);

Takes the return values of ld_str2binary() or ld2binary() and
returns the original NV. (Probably doesn't work if the original
NV is an inf or a nan.)

Cprintf(\$fmt, \$nv);
Uses C's printf() function to format the NV \$nv, according to the
formatting specified by the string \$fmt.

\$string = Csprintf(\$fmt, \$nv, \$buffer_size);
Uses C's sprintf() function to format the NV \$nv, according to the
formatting specified by the string \$fmt - and returns the result to
\$string. It's the responsibility of the caller to ensure that
\$buffer_size specifies a large enough number of characters to
accommodate C's sprintf formatting of \$nv.```

```   This program is free software; you may redistribute it and/or modify
`   Sisyphus <sisyphus at(@) cpan dot (.) org>`