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.