| Line | |
|---|
| 1 | #!/usr/bin/perl -w
|
|---|
| 2 |
|
|---|
| 3 | package Math::BigFloat::Trace;
|
|---|
| 4 |
|
|---|
| 5 | require 5.005_02;
|
|---|
| 6 | use strict;
|
|---|
| 7 |
|
|---|
| 8 | use Exporter;
|
|---|
| 9 | use Math::BigFloat;
|
|---|
| 10 | use vars qw($VERSION @ISA $PACKAGE @EXPORT_OK
|
|---|
| 11 | $accuracy $precision $round_mode $div_scale);
|
|---|
| 12 |
|
|---|
| 13 | @ISA = qw(Exporter Math::BigFloat);
|
|---|
| 14 |
|
|---|
| 15 | $VERSION = 0.01;
|
|---|
| 16 |
|
|---|
| 17 | use overload; # inherit overload from BigFloat
|
|---|
| 18 |
|
|---|
| 19 | # Globals
|
|---|
| 20 | $accuracy = $precision = undef;
|
|---|
| 21 | $round_mode = 'even';
|
|---|
| 22 | $div_scale = 40;
|
|---|
| 23 |
|
|---|
| 24 | sub new
|
|---|
| 25 | {
|
|---|
| 26 | my $proto = shift;
|
|---|
| 27 | my $class = ref($proto) || $proto;
|
|---|
| 28 |
|
|---|
| 29 | my $value = shift;
|
|---|
| 30 | my $a = $accuracy; $a = $_[0] if defined $_[0];
|
|---|
| 31 | my $p = $precision; $p = $_[1] if defined $_[1];
|
|---|
| 32 | my $self = Math::BigFloat->new($value,$a,$p,$round_mode);
|
|---|
| 33 |
|
|---|
| 34 | # remember, downgrading may return a BigInt, so don't meddle with class
|
|---|
| 35 | # bless $self,$class;
|
|---|
| 36 |
|
|---|
| 37 | print "MBF new '$value' => '$self' (",ref($self),")";
|
|---|
| 38 | return $self;
|
|---|
| 39 | }
|
|---|
| 40 |
|
|---|
| 41 | sub import
|
|---|
| 42 | {
|
|---|
| 43 | print "MBF import ",join(' ',@_);
|
|---|
| 44 | my $self = shift;
|
|---|
| 45 |
|
|---|
| 46 | # we catch the constants, the rest goes go BigFloat
|
|---|
| 47 | my @a = ();
|
|---|
| 48 | foreach (@_)
|
|---|
| 49 | {
|
|---|
| 50 | push @a, $_ if $_ ne ':constant';
|
|---|
| 51 | }
|
|---|
| 52 | overload::constant float => sub { $self->new(shift); };
|
|---|
| 53 |
|
|---|
| 54 | Math::BigFloat->import(@a); # need it for subclasses
|
|---|
| 55 | # $self->export_to_level(1,$self,@_); # need this ?
|
|---|
| 56 | }
|
|---|
| 57 |
|
|---|
| 58 | 1;
|
|---|
Note:
See
TracBrowser
for help on using the repository browser.