NAME

Math::LongDouble - perl interface to C's long double operations (for perls that don't already have that capability)

BUGS

This module has bugs on perls built with a Microsoft compiler (eg
ActivePerl) - even if the binaries installed onto the MSVC-built
perl were built using MinGW on a MinGW-built perl such as Strawberry
Perl (where no such problem exists).
By some means that is still unclear, the 'long double' precision
can apparently be reduced to 'double' precision whenever a 
Math::LongDouble object is raised to a power (or a square root taken)
on MSVC-built perls.
This bug manifests itself in causing some test failures in t/cmp.t
and t/pow.t.

DESCRIPTION

If your perl's NV is a 'long double', then there's no point in using this
module. But if your perl's NV is a 'double', then this module provides
you with a way of performing arithmetic operations with long double
precision.

 use Math::LongDouble qw(:all);

 my $arg = 32.1;
 my $ld1 = Math::LongDouble->new($arg);# Stringify $arg, then assign 
                                        # using C's strtold()
 my $ld2 = NVtoLD($arg); # Assign the NV 32.1 to $ld2.

OVERLOADING

The following operations are overloaded:
 + - * / **
 += -= *= /= **=
 != == <= >= <=> < >
 ++ --
 =
 abs bool ! int print
 sqrt log exp
 sin cos atan2

 Arguments to the overloaded operations must be Math::LongDouble
 objects.

  $ld = $ld + 3.1; # currently an error. Do instead:

  $ld = $ld + Math::LongDouble->new('3.1');

ASSIGNMENT FUNCTIONS

The following create and assign a new Math::LongDouble.

 $ld = Math::LongDouble->new($arg);
  Returns a Math::LongDouble object to which the numeric value of $arg
  has been assigned.
  If $arg is Math::LongDouble object, then it creates a copy of that
  object. Else, it first stringifies $arg, then assigns that numeric
  value using C's strtold function.

 $ld = UVtoLD($arg);
  Returns a Math::LongDouble object to which the numeric (unsigned
  integer) value of $arg has been assigned.

 $ld = IVtoLD($arg);
  Returns a Math::LongDouble object to which the numeric (signed
  integer) value of $arg has been assigned.

 $ld = NVtoLD($arg);
  Returns a Math::LongDouble object to which the numeric (floating
  point) value of $arg has been assigned.

 $ld = LDtoLD($arg);
  Returns a Math::LongDouble object to which the numeric (floating
  point) value of $arg has been assigned.

 $ld2 = STRtoLD($ld);
  Returns a Math::LongDouble object that is a copy of the
  Math::LongDouble object provided as the argument.

ASSIGNMENT OF INF, NAN and ZERO

$ld = InfLD($sign);
 If $sign < 0, returns a Math::LongDouble object set to
 negative infinity; else returns a Math::Decimal64 object set
 to positive infinity.

$ld = NaNLD($sign);
 If $sign < 0, returns a Math::longDouble object set to
 negative NaN; else returns a Math::LongDouble object set to
 positive NaN. It may be problematical as to whether a NaN
 with the correct sign has been returned ... but, either way,
 it should return a NaN.

$ld = ZeroLD($sign);
 If $sign < 0, returns a Math::LongDouble object set to
 negative zero; else returns a Math::LongDouble object set to 
 zero.

RETRIEVAL FUNCTIONS

The following functions provide ways of seeing the value of
Math::LongDouble objects.

$nv = LDtoNV($ld);
 This function returns the value of the Math::LongDouble object to
 a perl scalar (NV). It may not translate the value accurately.

$string = LDtoSTR($ld);
 Returns the value of the Math::LongDouble object as a string.
 The returned string will contain the same as is displayed by
 "print $ld", except that print() will strip the trailing zeroes
 in the mantissa (significand) whereas LDtoSTR won't.

OTHER FUNCTIONS

$bool = is_NaNLD($ld); 
 Returns 1 if $ld is a Math::LongDouble NaN.
 Else returns 0

$int = is_InfLD($ld)
 If the Math::LongDouble object $ld is -inf, returns -1.
 If it is +inf, returns 1.
 Otherwise returns 0.

$int = is_ZeroLD($ld);
 If the Math::LongDouble object $ld is -0, returns -1.
 If it is zero, returns 1.
 Otherwise returns 0.

$int = cmp_NV($ld, $nv);
 If the Math::LongDouble object $ld < $nv returns -1.
 If it is > $nv, returns 1.
 Otherwise returns 0.
  

LICENSE

This program is free software; you may redistribute it and/or modify
it under the same terms as Perl itself.
Copyright 2012 Sisyphus

AUTHOR

Sisyphus <sisyphus at(@) cpan dot (.) org>