summaryrefslogtreecommitdiff
path: root/lib/Math
diff options
context:
space:
mode:
authorJarkko Hietaniemi <jhi@iki.fi>2002-03-24 00:21:07 +0000
committerJarkko Hietaniemi <jhi@iki.fi>2002-03-24 00:21:07 +0000
commit126f3c5f1f20a40de59db499161effaa9e24e4fc (patch)
treef398c631329fb22497450ce03163dfb3f91e36bf /lib/Math
parent06fdd4fef0ae8dab353d3f94e41499b82adb1ae7 (diff)
downloadperl-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.pm58
-rw-r--r--lib/Math/BigInt/Trace.pm47
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;