=encoding euc-jp
=head1 NAME
=begin original
bigrat - Transparent BigNumber/BigRational support for Perl
=end original
bigrat - Perl 用の透過的な BigNumber/BigRational 対応
=head1 SYNOPSIS
use bigrat;
print 2 + 4.5,"\n"; # BigFloat 6.5
print 1/3 + 1/4,"\n"; # produces 7/12
{
no bigrat;
print 1/3,"\n"; # 0.33333...
}
# Note that this will make hex() and oct() be globally overriden:
use bigrat qw/hex oct/;
print hex("0x1234567890123490"),"\n";
print oct("01234567890123490"),"\n";
=head1 DESCRIPTION
=begin original
All operators (including basic math operations) are overloaded. Integer and
floating-point constants are created as proper BigInts or BigFloats,
respectively.
=end original
(基本算術演算子を含む)全ての演算子がオーバーロードされます。
整数定数と浮動小数点数定数はそれぞれ適切な BigInt または BigFloat として
作成されます。
=begin original
Other than L, this module upgrades to Math::BigRat, meaning that
instead of 2.5 you will get 2+1/2 as output.
=end original
Other than L, this module upgrades to Math::BigRat, meaning that
instead of 2.5 you will get 2+1/2 as output.
(TBT)
=head2 Modules Used
(使用するモジュール)
=begin original
C is just a thin wrapper around various modules of the Math::BigInt
family. Think of it as the head of the family, who runs the shop, and orders
the others to do the work.
=end original
C is just a thin wrapper around various modules of the Math::BigInt
family. Think of it as the head of the family, who runs the shop, and orders
the others to do the work.
(TBT)
=begin original
The following modules are currently used by bignum:
=end original
The following modules are currently used by bignum:
(TBT)
Math::BigInt::Lite (for speed, and only if it is loadable)
Math::BigInt
Math::BigFloat
Math::BigRat
=head2 Math Library
(算術ライブラリ)
=begin original
Math with the numbers is done (by default) by a module called
Math::BigInt::Calc. This is equivalent to saying:
=end original
Math with the numbers is done (by default) by a module called
Math::BigInt::Calc. This is equivalent to saying:
(TBT)
use bigrat lib => 'Calc';
=begin original
You can change this by using:
=end original
You can change this by using:
(TBT)
use bignum lib => 'GMP';
=begin original
The following would first try to find Math::BigInt::Foo, then
Math::BigInt::Bar, and when this also fails, revert to Math::BigInt::Calc:
=end original
The following would first try to find Math::BigInt::Foo, then
Math::BigInt::Bar, and when this also fails, revert to Math::BigInt::Calc:
(TBT)
use bigrat lib => 'Foo,Math::BigInt::Bar';
=begin original
Using C warns if none of the specified libraries can be found and
L did fall back to one of the default libraries.
To supress this warning, use C instead:
=end original
Using C warns if none of the specified libraries can be found and
L did fall back to one of the default libraries.
To supress this warning, use C instead:
(TBT)
use bignum try => 'GMP';
=begin original
If you want the code to die instead of falling back, use C instead:
=end original
If you want the code to die instead of falling back, use C instead:
(TBT)
use bignum only => 'GMP';
=begin original
Please see respective module documentation for further details.
=end original
Please see respective module documentation for further details.
(TBT)
=head2 Sign
(符号)
=begin original
The sign is either '+', '-', 'NaN', '+inf' or '-inf'.
=end original
The sign is either '+', '-', 'NaN', '+inf' or '-inf'.
(TBT)
=begin original
A sign of 'NaN' is used to represent the result when input arguments are not
numbers or as a result of 0/0. '+inf' and '-inf' represent plus respectively
minus infinity. You will get '+inf' when dividing a positive number by 0, and
'-inf' when dividing any negative number by 0.
=end original
A sign of 'NaN' is used to represent the result when input arguments are not
numbers or as a result of 0/0. '+inf' and '-inf' represent plus respectively
minus infinity. You will get '+inf' when dividing a positive number by 0, and
'-inf' when dividing any negative number by 0.
(TBT)
=head2 Methods
(メソッド)
=begin original
Since all numbers are not objects, you can use all functions that are part of
the BigInt or BigFloat API. It is wise to use only the bxxx() notation, and not
the fxxx() notation, though. This makes you independed on the fact that the
underlying object might morph into a different class than BigFloat.
=end original
Since all numbers are not objects, you can use all functions that are part of
the BigInt or BigFloat API. It is wise to use only the bxxx() notation, and not
the fxxx() notation, though. This makes you independed on the fact that the
underlying object might morph into a different class than BigFloat.
(TBT)
=over 2
=item inf()
=begin original
A shortcut to return Math::BigInt->binf(). Useful because Perl does not always
handle bareword C properly.
=end original
A shortcut to return Math::BigInt->binf(). Useful because Perl does not always
handle bareword C properly.
(TBT)
=item NaN()
=begin original
A shortcut to return Math::BigInt->bnan(). Useful because Perl does not always
handle bareword C properly.
=end original
A shortcut to return Math::BigInt->bnan(). Useful because Perl does not always
handle bareword C properly.
(TBT)
=item e
# perl -Mbigrat=e -wle 'print e'
=begin original
Returns Euler's number C, aka exp(1).
=end original
Returns Euler's number C, aka exp(1).
(TBT)
=item PI
# perl -Mbigrat=PI -wle 'print PI'
=begin original
Returns PI.
=end original
Returns PI.
(TBT)
=item bexp()
bexp($power,$accuracy);
=begin original
Returns Euler's number C raised to the appropriate power, to
the wanted accuracy.
=end original
Returns Euler's number C raised to the appropriate power, to
the wanted accuracy.
(TBT)
=begin original
Example:
=end original
Example:
(TBT)
# perl -Mbigrat=bexp -wle 'print bexp(1,80)'
=item bpi()
bpi($accuracy);
=begin original
Returns PI to the wanted accuracy.
=end original
Returns PI to the wanted accuracy.
(TBT)
=begin original
Example:
=end original
Example:
(TBT)
# perl -Mbigrat=bpi -wle 'print bpi(80)'
=item upgrade()
=begin original
Return the class that numbers are upgraded to, is in fact returning
C<$Math::BigInt::upgrade>.
=end original
Return the class that numbers are upgraded to, is in fact returning
C<$Math::BigInt::upgrade>.
(TBT)
=item in_effect()
use bigrat;
print "in effect\n" if bigrat::in_effect; # true
{
no bigrat;
print "in effect\n" if bigrat::in_effect; # false
}
=begin original
Returns true or false if C is in effect in the current scope.
=end original
Returns true or false if C is in effect in the current scope.
(TBT)
=begin original
This method only works on Perl v5.9.4 or later.
=end original
This method only works on Perl v5.9.4 or later.
(TBT)
=back
=head2 MATH LIBRARY
(算術ライブラリ)
=begin original
Math with the numbers is done (by default) by a module called
=end original
Math with the numbers is done (by default) by a module called
(TBT)
=head2 Cavaet
=begin original
But a warning is in order. When using the following to make a copy of a number,
only a shallow copy will be made.
=end original
But a warning is in order. When using the following to make a copy of a number,
only a shallow copy will be made.
(TBT)
$x = 9; $y = $x;
$x = $y = 7;
=begin original
If you want to make a real copy, use the following:
=end original
If you want to make a real copy, use the following:
(TBT)
$y = $x->copy();
=begin original
Using the copy or the original with overloaded math is okay, e.g. the
following work:
=end original
Using the copy or the original with overloaded math is okay, e.g. the
following work:
(TBT)
$x = 9; $y = $x;
print $x + 1, " ", $y,"\n"; # prints 10 9
=begin original
but calling any method that modifies the number directly will result in
B the original and the copy being destroyed:
=end original
but calling any method that modifies the number directly will result in
B the original and the copy being destroyed:
(TBT)
$x = 9; $y = $x;
print $x->badd(1), " ", $y,"\n"; # prints 10 10
$x = 9; $y = $x;
print $x->binc(1), " ", $y,"\n"; # prints 10 10
$x = 9; $y = $x;
print $x->bmul(2), " ", $y,"\n"; # prints 18 18
=begin original
Using methods that do not modify, but testthe contents works:
=end original
Using methods that do not modify, but testthe contents works:
(TBT)
$x = 9; $y = $x;
$z = 9 if $x->is_zero(); # works fine
=begin original
See the documentation about the copy constructor and C<=> in overload, as
well as the documentation in BigInt for further details.
=end original
See the documentation about the copy constructor and C<=> in overload, as
well as the documentation in BigInt for further details.
(TBT)
=head2 Options
(オプション)
=begin original
bignum recognizes some options that can be passed while loading it via use.
The options can (currently) be either a single letter form, or the long form.
The following options exist:
=end original
bignum recognizes some options that can be passed while loading it via use.
The options can (currently) be either a single letter form, or the long form.
The following options exist:
(TBT)
=over 2
=item a or accuracy
=begin original
This sets the accuracy for all math operations. The argument must be greater
than or equal to zero. See Math::BigInt's bround() function for details.
=end original
This sets the accuracy for all math operations. The argument must be greater
than or equal to zero. See Math::BigInt's bround() function for details.
(TBT)
perl -Mbigrat=a,50 -le 'print sqrt(20)'
=begin original
Note that setting precision and accurary at the same time is not possible.
=end original
Note that setting precision and accurary at the same time is not possible.
(TBT)
=item p or precision
=begin original
This sets the precision for all math operations. The argument can be any
integer. Negative values mean a fixed number of digits after the dot, while
a positive value rounds to this digit left from the dot. 0 or 1 mean round to
integer. See Math::BigInt's bfround() function for details.
=end original
This sets the precision for all math operations. The argument can be any
integer. Negative values mean a fixed number of digits after the dot, while
a positive value rounds to this digit left from the dot. 0 or 1 mean round to
integer. See Math::BigInt's bfround() function for details.
(TBT)
perl -Mbigrat=p,-50 -le 'print sqrt(20)'
=begin original
Note that setting precision and accurary at the same time is not possible.
=end original
Note that setting precision and accurary at the same time is not possible.
(TBT)
=item t or trace
=begin original
This enables a trace mode and is primarily for debugging bignum or
Math::BigInt/Math::BigFloat.
=end original
This enables a trace mode and is primarily for debugging bignum or
Math::BigInt/Math::BigFloat.
(TBT)
=item l or lib
=begin original
Load a different math lib, see L