diff options
author | Jarkko Hietaniemi <jhi@iki.fi> | 2002-03-24 00:21:07 +0000 |
---|---|---|
committer | Jarkko Hietaniemi <jhi@iki.fi> | 2002-03-24 00:21:07 +0000 |
commit | 126f3c5f1f20a40de59db499161effaa9e24e4fc (patch) | |
tree | f398c631329fb22497450ce03163dfb3f91e36bf /lib/Math | |
parent | 06fdd4fef0ae8dab353d3f94e41499b82adb1ae7 (diff) | |
download | perl-126f3c5f1f20a40de59db499161effaa9e24e4fc.tar.gz |
Merge bignum 0.10, from Tels.
p4raw-id: //depot/perl@15455
Diffstat (limited to 'lib/Math')
-rw-r--r-- | lib/Math/BigFloat/Trace.pm | 58 | ||||
-rw-r--r-- | lib/Math/BigInt/Trace.pm | 47 |
2 files changed, 105 insertions, 0 deletions
diff --git a/lib/Math/BigFloat/Trace.pm b/lib/Math/BigFloat/Trace.pm new file mode 100644 index 0000000000..871b2a969e --- /dev/null +++ b/lib/Math/BigFloat/Trace.pm @@ -0,0 +1,58 @@ +#!/usr/bin/perl -w + +package Math::BigFloat::Trace; + +require 5.005_02; +use strict; + +use Exporter; +use Math::BigFloat; +use vars qw($VERSION @ISA $PACKAGE @EXPORT_OK + $accuracy $precision $round_mode $div_scale); + +@ISA = qw(Exporter Math::BigFloat); + +$VERSION = 0.01; + +use overload; # inherit overload from BigFloat + +# Globals +$accuracy = $precision = undef; +$round_mode = 'even'; +$div_scale = 40; + +sub new +{ + my $proto = shift; + my $class = ref($proto) || $proto; + + my $value = shift; + my $a = $accuracy; $a = $_[0] if defined $_[0]; + my $p = $precision; $p = $_[1] if defined $_[1]; + my $self = Math::BigFloat->new($value,$a,$p,$round_mode); + +# remember, downgrading may return a BigInt, so don't meddle with class +# bless $self,$class; + + print "MBF new '$value' => '$self' (",ref($self),")"; + return $self; +} + +sub import + { + print "MBF import ",join(' ',@_); + my $self = shift; + + # we catch the constants, the rest goes go BigFloat + my @a = (); + foreach (@_) + { + push @a, $_ if $_ ne ':constant'; + } + overload::constant float => sub { $self->new(shift); }; + + Math::BigFloat->import(@a); # need it for subclasses +# $self->export_to_level(1,$self,@_); # need this ? + } + +1; diff --git a/lib/Math/BigInt/Trace.pm b/lib/Math/BigInt/Trace.pm new file mode 100644 index 0000000000..4733d22634 --- /dev/null +++ b/lib/Math/BigInt/Trace.pm @@ -0,0 +1,47 @@ +#!/usr/bin/perl -w + +package Math::BigInt::Trace; + +require 5.005_02; +use strict; + +use Exporter; +use Math::BigInt; +use vars qw($VERSION @ISA $PACKAGE @EXPORT_OK + $accuracy $precision $round_mode $div_scale); + +@ISA = qw(Exporter Math::BigInt); + +$VERSION = 0.01; + +use overload; # inherit overload from BigInt + +# Globals +$accuracy = $precision = undef; +$round_mode = 'even'; +$div_scale = 40; + +sub new +{ + my $proto = shift; + my $class = ref($proto) || $proto; + + my $value = shift; + my $a = $accuracy; $a = $_[0] if defined $_[0]; + my $p = $precision; $p = $_[1] if defined $_[1]; + my $self = Math::BigInt->new($value,$a,$p,$round_mode); + bless $self,$class; + print "MBI new '$value' => '$self' (",ref($self),")"; + return $self; +} + +sub import + { + print "MBI import ",join(' ',@_); + my $self = shift; + Math::BigInt::import($self,@_); # need it for subclasses +# $self->export_to_level(1,$self,@_); # need this ? + @_ = (); + } + +1; |