sync blead with Update Archive::Extract 0.34
[p5sagit/p5-mst-13.2.git] / lib / bigint.pm
index 941ee5c..e143af6 100644 (file)
@@ -1,11 +1,11 @@
 package bigint;
-use 5.006002;
+use 5.006;
 
-$VERSION = '0.22';
+$VERSION = '0.23';
 use Exporter;
 @ISA           = qw( Exporter );
-@EXPORT_OK     = qw( ); 
-@EXPORT                = qw( inf NaN ); 
+@EXPORT_OK     = qw( PI e bpi bexp );
+@EXPORT                = qw( inf NaN );
 
 use strict;
 use overload;
@@ -215,7 +215,10 @@ sub import
       splice @a, $j, 1; $j --;
       $oct = \&_oct_global;
       }
-    else { die "unknown option $_[$i]"; }
+    elsif ($_[$i] !~ /^(PI|e|bpi|bexp)\z/)
+      {
+      die ("unknown option $_[$i]");
+      }
     }
   my $class;
   $_lite = 0;                                  # using M::BI::L ?
@@ -266,7 +269,7 @@ sub import
   no strict 'refs';
   if (!defined *{"${package}::inf"})
     {
-    $self->export_to_level(1,$self,@a);           # export inf and NaN
+    $self->export_to_level(1,$self,@a);           # export inf and NaN, e and PI
     }
   {
     no warnings 'redefine';
@@ -275,8 +278,13 @@ sub import
   }
   }
 
-sub inf () { Math::BigInt->binf(); }
-sub NaN () { Math::BigInt->bnan(); }
+sub inf () { Math::BigInt::binf(); }
+sub NaN () { Math::BigInt::bnan(); }
+
+sub PI () { Math::BigInt->new(3); }
+sub e () { Math::BigInt->new(2); }
+sub bpi ($) { Math::BigInt->new(3); }
+sub bexp ($$) { my $x = Math::BigInt->new($_[0]); $x->bexp($_[1]); }
 
 1;
 
@@ -388,13 +396,13 @@ Math::BigInt.
 
 =item hex
 
-Override the build-in hex() method with a version that can handle big
+Override the built-in hex() method with a version that can handle big
 integers. Note that under Perl v5.9.4 or ealier, this will be global
 and cannot be disabled with "no bigint;".
 
 =item oct
 
-Override the build-in oct() method with a version that can handle big
+Override the built-in oct() method with a version that can handle big
 integers. Note that under Perl v5.9.4 or ealier, this will be global
 and cannot be disabled with "no bigint;".
 
@@ -489,6 +497,44 @@ handle bareword C<inf> properly.
 A shortcut to return Math::BigInt->bnan(). Useful because Perl does not always
 handle bareword C<NaN> properly.
 
+=item e
+
+       # perl -Mbigint=e -wle 'print e'
+
+Returns Euler's number C<e>, aka exp(1). Note that under bigint, this is
+truncated to an integer, and hence simple '2'.
+
+=item PI
+
+       # perl -Mbigint=PI -wle 'print PI'
+
+Returns PI. Note that under bigint, this is truncated to an integer, and hence
+simple '3'.
+
+=item bexp()
+
+       bexp($power,$accuracy);
+
+Returns Euler's number C<e> raised to the appropriate power, to
+the wanted accuracy.
+
+Note that under bigint, the result is truncated to an integer.
+
+Example:
+
+       # perl -Mbigint=bexp -wle 'print bexp(1,80)'
+
+=item bpi()
+
+       bpi($accuracy);
+
+Returns PI to the wanted accuracy. Note that under bigint, this is truncated
+to an integer, and hence simple '3'.
+
+Example:
+
+       # perl -Mbigint=bpi -wle 'print bpi(80)'
+
 =item upgrade()
 
 Return the class that numbers are upgraded to, is in fact returning