# _a : accuracy
# _p : precision
-$VERSION = '1.58';
-require 5.006002;
+$VERSION = '1.59';
+require 5.006;
require Exporter;
@ISA = qw/Math::BigInt/;
}
if ($x_is_zero)
{
- #return $x->bone() if $y_is_zero;
return $x if $y->{sign} eq '+'; # 0**y => 0 (if not y <= 0)
# 0 ** -y => 1 / (0 ** y) => 1 / 0! (1 / 0 => +inf)
return $x->binf();
$n = undef if $n eq 'Math::BigFloat';
}
$self = ref($self) if ref($self);
+ my $fallback = defined $n ? 0 : 1;
$n = 40 if !defined $n || $n < 1;
# after 黃見利 (Hwang Chien-Lih) (1997)
$v->bdiv($v_d, $n);
$w->bdiv($w_d, $n);
- delete $x->{a}; delete $y->{a}; delete $z->{a};
- delete $u->{a}; delete $v->{a}; delete $w->{a};
+ delete $x->{_a}; delete $y->{_a}; delete $z->{_a};
+ delete $u->{_a}; delete $v->{_a}; delete $w->{_a};
$x->badd($y)->bsub($z)->badd($u)->bsub($v)->bsub($w);
- $x->round($n-4);
+ $x->bround($n-4);
+ delete $x->{_a} if $fallback == 1;
+ $x;
}
sub bcos
my $x2 = $over->copy(); # X ^ 2; difference between terms
my $sign = 1; # start with -=
my $below = $self->new(2); my $factorial = $self->new(3);
- $x->bone(); delete $x->{a}; delete $x->{p};
+ $x->bone(); delete $x->{_a}; delete $x->{_p};
my $limit = $self->new("1E-". ($scale-1));
#my $steps = 0;
$over->bmul($x); # X ^ 3 as starting value
my $sign = 1; # start with -=
my $below = $self->new(6); my $factorial = $self->new(4);
- delete $x->{a}; delete $x->{p};
+ delete $x->{_a}; delete $x->{_p};
my $limit = $self->new("1E-". ($scale-1));
#my $steps = 0;
}
# This series is only valid if -1 < x < 1, so for other x we need to
- # to calculate PI/ - atan(1/x):
+ # to calculate PI/2 - atan(1/x):
my $one = $MBI->_new(1);
my $pi = undef;
if ($x->{_es} eq '+' && ($MBI->_acmp($x->{_m},$one) >= 0))
my $sign = 1; # start with -=
my $below = $self->new(3);
my $two = $self->new(2);
- delete $x->{a}; delete $x->{p};
+ delete $x->{_a}; delete $x->{_p};
my $limit = $self->new("1E-". ($scale-1));
#my $steps = 0;